Web安全系列——CSRF攻击

前言

CSRF 攻击是Web应用中最常见的攻击方式之一。

CSRF攻击给网站身份验证、用户账户和个人隐私带来极大威胁。了解 CSRF 攻击的流程、原理与防御措施,是构建安全可靠的Web应用程序的必要条件。

什么是CSRF攻击

CSRF,全称是Cross-Site Request Forgery,中文名为跨站请求伪造。

CSRF攻击是指指恶意攻击者利用用户已经登录了另一个网站的“身份”来伪造用户的请求(例如提交一个表单)。

CSRF攻击的流程与原理

CSRF攻击的流程与原理如下图所示

  • 首先,受害人访问正常站点aa.com,并生成了登录态(以cookie等方式存储在浏览器中)
  • 接着,受害人访问攻击者刻意构造的看似无害的站点bb.com,bb.com中的恶意页面在加载时会像aa.com发起恶意请求
  • 由于处在同一浏览器中,攻击者可以直接使用aa.com的cookie(登录态)

CSRF 攻击的危害:

CSRF 攻击通常会对 Web 应用程序和用户造成严重威胁和不良影响:

  • 窃取敏感信息: 攻击者可能利用 CSRF 攻击来窃取用户的敏感个人信息,例如身份证号码、收入、税务纪录等。
  • 窃取个人或机构账户: 通过 CSRF 攻击,攻击者可能会利用已经验证过的认证信息,从用户的账户中取走资金、转移资金或在用户知情的情况下进行消费等行为。
  • 篡改记录: CSRF 攻击也可能会利用用户的身份执行各种不良行为,例如更改记录、删除条目或篡改信息等。从而导致数据损失和信息可用性受损,特别是对某些爱好者、研究员或初创公司来说,其数据是极其重要的。
  • 拒绝服务攻击: 攻击者通过 CSRF 攻击向目标服务器发送大量的恶意请求,使服务器处理过载,从而使其变得不可用,拒绝服务。
  • 破坏用户信任: 当 CSRF 攻击成功时,很可能会导致用户对受攻击之后的 Web 应用程序产生不信任感。这可能会迫使他们停止使用被攻击的网站,这可能会给企业造成巨大的经济损失和声誉影响。

如何防御 CSRF 攻击:

  • 使用POST请求: 使用GET HTTP 方法会更容易受到攻击,因此可以使用 POST 或其他安全的 HTTP 方法。
  • 用户身份验证: 将用户身份验证放在敏感操作之前,这可以增加攻击者窃取用户身份验证 token 的难度。
  • 检查来源站点: 检查 Web 请求是来自已知的和可信的站点。开发者可以检查请求的来源(Referrer)以及请求的主机(Origin 或者 Host),以确保请求是合法的。
  • 使用 CSRF Token: 为表单和其他交互设定随机令牌,称为 CSRF 中的 Token,在请求提交时一并提交 Token,如此服务器可根据Token验证请求的合法性。
  • 防止 third-party cookies: 禁止第三方 cookie 将 cookie 从一个子域传递到另一个子域以防止攻击者获取凭据。
  • SameSite cookies: 把 cookie 属性设置为SameSite,以防止跨站点 cookie 变成 CSRF 攻击的最佳攻击向量之一。
  • 使用 CSP: CSP 能够指定页面的某些部分从哪些资源进行加载。这样,即使攻击者成功注入了第三方脚本或 iFrame,浏览器也将拒绝加载并执行脚本。

CSRF 与XSS攻击对比

初学者经常将CSRF攻击和XSS攻击搞混,这里将这两者进行简单对比

CSRF

XSS

攻击方式

利用受害者身份凭证进行非法操作

利用网页编码不健壮所造成的网页漏洞

攻击目标

受害者的身份认证

利用受害者自身的浏览器漏洞,实现身份窃取、数据篡改等目的

攻击流程

先让受害者在已经通过身份验证的网站中打开伪造的页面,然后伪造的页面(例如藏在图片中的链接)会发起网络请求进行攻击

在用户的输入中注入恶意脚本,通常是 JavaScript,然后在用户访问包含了这些恶意代码的网站时,这些代码就会在用户的浏览器上执行

总结

CSRF 攻击是互联网世界中的常见安全威胁之一,攻击者通过借用用户身份验证,从而可以执行任意的操作并且不经过用户的认可。为了保护网站与用户的安全,开发人员和用户都应了解 CSRF 攻击并采取一系列预防和防御措施,包括使用合适的随机令牌,设置 SameSite cookies、定期检测、使用防火墙等。