博客

程序员的安全进阶:分享与学习系列——跨站请求伪造

December 13, 2018
Jaap Karan Singh

与直接针对网站或应用程序运营商的攻击不同,许多跨站请求伪造(CSRF)攻击的目标是直接从用户那里窃取金钱、商品或凭据。这并不意味着网站运营商可以忽视 CSRF 代码漏洞,因为如果是纯粹的资金攻击,最终赔偿被盗资金的责任可能落在拥有不安全代码的托管网站身上。如果目标用户丢失了凭据或密码被恶意更改,犯罪分子可能会利用窃取的身份造成严重破坏,尤其是当受害者拥有特权访问权限时。

CSRF 攻击相当复杂,需要多个环节配合才能成功。换句话说,攻击者必须在多个方面都得手才能奏效。尽管如此,它仍是一种极其流行的攻击手段,因为一旦攻击成功,黑客不仅可以直接转走资金,还能在网站上畅行无阻。如果一切按黑客的预想进行,目标用户甚至可能根本不知道自己遭到了攻击。

好消息是,由于 CSRF 攻击的成功需要满足诸多条件,因此有许多出色的防御技术可以将其扼杀在摇篮中。

为此,我们将探讨 CSRF 攻击的三个关键方面:

  • 它们的工作原理
  • 它们为何如此危险
  • 如何部署防御措施以彻底阻止它们。

CSRF 攻击是如何工作的?

由于成功的 CSRF 攻击能够直接从目标用户那里窃取金钱、商品或凭据,尽管其准备工作繁琐,但依然十分猖獗。由于它们常在不同平台上尝试,多年来衍生出了各种名称和别称。你可能听说过 CSRF 攻击被称为 XSRF、Sea Surf、会话骑劫(Session Riding)、跨站引用伪造或恶意链接。微软在其大多数文档中倾向于将其称为“一键式攻击”(One-Click attacks)。但它们本质上都是 CSRF 攻击,防御它们的技术也是相同的。

当用户登录网站进行业务操作或工作时,CSRF 攻击就可能发生。关键在于用户必须处于登录状态,并已通过网站或应用程序的身份验证。攻击通常从辅助网站或电子邮件发起。攻击者经常使用社会工程学手段,诱骗用户点击电子邮件中的链接,将其带到包含攻击脚本的受感染网站。

受感染的网站包含一个脚本,指示活动浏览器执行命令,通常是更改用户密码或将资金转入攻击者控制的账户等恶意操作。只要用户已通过身份验证,网站就会认为这些命令是由授权用户发出的。为什么不呢?用户已经完成了身份验证,并提供了访问网站所需的所有密码。他们甚至可能位于地理围栏内,正坐在办公室终端前。如果他们想要更改密码或转账,网站没有理由不相信这就是他们本人发出的请求。

剖析攻击的要素,就能明白为什么这种攻击对攻击者来说如此困难。首先,用户必须在攻击发生的网站上处于活跃的身份验证状态。如果带有攻击脚本的电子邮件在用户结束浏览器会话或注销后才送达,攻击就会失败。

攻击者还被迫对目标网站进行大量侦察,以了解该网站接受哪些脚本。攻击者无法看到受害者的屏幕,网站的任何反馈都会发送给受害者,而不是攻击者。除非攻击者能够看到攻击成功的证据,例如账户中突然出现的资金,否则他们甚至无法立即知道攻击是否成功。

在用户必须处于登录状态且必须了解目标网站接受何种脚本这些困难(但并非不可能)的参数范围内,执行 CSRF 攻击的代码可以非常简单,尽管具体取决于网站本身。

假设某银行或金融应用程序使用 GET 请求进行转账,如下所示:

GET http://bank.com/transferdo?acct=NancySmith12&amount=100 HTTP/1.1

该代码将发送一个请求,向名为 NancySmith12 的用户转账 100 美元。

但如果目标用户收到一封伪装成同事发来的电子邮件,CSRF 攻击脚本就可以嵌入到点击操作中:

<a href="http://bank.com/transfer.do?acct=ShadyLady15&amount=100000">你能快速阅读一下这份季度报告吗?<a></a></a>

如果目标用户中了社会工程学链接的圈套,并在金融应用程序的浏览器会话仍处于打开状态时点击了它,他们的浏览器就会要求应用程序向 ShadyLady15 的账户发送 100,000 美元。

该脚本甚至可以隐藏在用户看不见的图像中,但仍然可以触发浏览器发出请求,如下所示:

<img src="http://bank.com/transfer.do?acct=ShadyLady15&amount=100000" width="0" height="0" border="0">

结果是一样的。ShadyLady15 在无人察觉的情况下成功转走了 10 万美元。

为什么 CSRF 如此危险?

CSRF 攻击之所以在今天依然猖獗,原因与勒索软件持续泛滥如出一辙:它能让攻击者以极短的路径直接窃取受害者的资金。在勒索软件攻击中,系统被加密,用户被迫支付赎金以解密数据;而 CSRF 攻击的步骤更少。一旦攻击成功,受害者会在毫无察觉的情况下将钱转给攻击者。

除了直接针对受害者个人或公司的资金进行攻击外,成功的 CSRF 攻击还能利用合法用户来入侵网络。试想一下,如果攻击者利用 CSRF 漏洞修改了管理员的密码,他们便能立即利用该密码窃取数据、打开网络防御缺口或植入后门。

尽管需要投入大量精力,且在一定程度上依赖运气,但对于黑客而言,一次成功的 CSRF 攻击无论最终目的是什么,都无异于中了大奖。在攻击网络时,几乎所有其他类型的攻击都需要数月时间进行缓慢而隐蔽的侦察,以试图避开 SIEM 和网络安全人员的监控。相比之下,单次 CSRF 攻击可以跳过网络攻击链中的多个环节,让攻击者直接逼近最终目标。

如何防御 CSRF 攻击?

与大多数漏洞不同,CSRF 攻击的根源并非代码本身,而是攻击者利用漏洞强制浏览器发起用户不希望、甚至完全不知情的请求。不过,这些攻击是可以被防御的。

最有效的方法之一是让开发人员在生成新会话时,为用户的身份添加一个 CSRF 令牌。该令牌应由一串唯一且随机的字符组成,且对用户不可见。接下来,将 CSRF 令牌请求作为隐藏字段添加到表单中,并在服务器提交新请求时进行校验。通过用户浏览器提交请求的攻击者甚至无法察觉到这个隐藏的令牌字段,更不用说获取其内容,因此他们的所有请求都将失败。

另一种更简单且无需大量编程的方法是,在修改密码或转账等敏感操作中加入验证码(Captcha)校验。这可以简单到要求用户点击一个按钮来确认操作者并非机器人(或在此场景下的 CSRF 脚本)。攻击者无法通过脚本响应此类挑战,而如果用户在未进行转账等操作时突然收到验证码请求,也会意识到异常。此外,根据组织对安全与效率平衡的需求,还可以使用第三方令牌(如智能手机)生成一次性密码。

最后,虽然并非万无一失,但 Microsoft Edge 或 Google Chrome 等许多浏览器现在都内置了 同源策略 限制,以阻止来自本地用户以外的任何请求。强制用户使用这些浏览器的最新版本,可以在不增加开发团队负担的情况下,为 CSRF 安全增加另一层保障。

彻底封堵 CSRF

由于潜在收益巨大,CSRF 攻击可能永远不会彻底消失,但希望您已经了解了它们为何如此顽固,以及如何从网络中彻底封堵这些攻击。

如需深入了解,您可以查阅 OWASP 跨站请求伪造预防备忘单,这是一份记录该漏洞演变的动态文档。如果您想进一步提升安全知识,欢迎访问 Secure Code Warrior 博客,学习如何击败此类威胁及更多安全挑战。

准备好测试您的新防御技能了吗?立即体验 Secure Code Warrior 平台的免费演示吧。

标语

在 AI 驱动的开发成果发布前实现有效治理

评估 AI 辅助风险,在提交代码时强制执行安全编码策略,并加速整个软件开发生命周期的安全交付。

预约演示
资源库

探索更多博客

获取有关安全编码、人工智能治理和软件风险管理的专家内容。

浏览全部
案例研究
筛选标签
这是 div 块中的一段文本。

Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

了解更多
案例研究
筛选标签
这是 div 块中的一段文本。

Security as culture: How Blue Prism cultivates world-class secure developers

Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed

了解更多
案例研究
筛选标签
这是 div 块中的一段文本。

统一的安全文化:Sage 如何打造其安全倡导者项目

了解 Sage 如何通过灵活且以关系为导向的方法提升安全性,成功培养了 200 多名安全倡导者,并实现了显著的风险降低。

了解更多
博客
筛选标签
这是 div 块中的一段文本。

2026年网络安全意识月:理解人工智能安全对企业防御至关重要

目前,大多数顶级人工智能公司已公开呼吁全球放缓人工智能的发展速度,以便安全防护措施能够跟上步伐。然而事实是,严重的安全问题已经显现。随着人工智能实施带来的经济成本和风险不断累积,无数安全领导者和高管团队正处于紧迫的境地。

了解更多
博客
筛选标签
这是 div 块中的一段文本。

赋能要素 8:打造项目品牌

成功的安全编码项目不仅需要优质的内容。赋能要素 8 展示了如何通过品牌化将参与过程转变为一种令人向往、以地位为驱动的体验。

了解更多
博客
筛选标签
这是 div 块中的一段文本。

每一位员工现在都处于 AI 网络安全的最前线

企业技术格局正以一种鲜有人预料到的速度发生剧变,直到为时已晚。我们已正式跨越了从人工编写代码和基础辅助编程,进入“智能体开发生命周期”(ADLC)的时代。虽然自主 AI 智能体有望在多个职能领域实现前所未有的效率,但它们也带来了全新的安全和监管风险。

了解更多

在产品发布前确保 AI 驱动的开发安全

洞察开发风险,执行安全策略,并在整个软件开发生命周期中预防漏洞。

预约演示
未找到相关项目。