CSRF (跨站请求伪造)
最后修改于 2025 年 4 月 4 日
CSRF 定义
CSRF (Cross-Site Request Forgery,跨站请求伪造) 是一种 Web 安全漏洞,它允许攻击者诱骗用户在 Web 应用程序中执行非自愿的操作。当恶意网站导致用户浏览器向用户已登录的目标站点发送未经授权的请求时,就会发生这种情况。这些伪造的请求可以执行诸如更改账户详细信息、进行交易或修改数据等操作,而用户对此毫不知情。CSRF 攻击利用的是 Web 应用程序对用户浏览器的信任,而不是用户本身。这使得它与其他攻击(如 XSS,跨站脚本攻击)有所不同。
CSRF 中的“伪造”一词指的是攻击者能够伪造看起来合法的 HTTP 请求发送给服务器。由于浏览器会在每次请求时自动包含 Cookie 和会话信息,因此服务器无法区分Genuine 用户操作和伪造的操作。CSRF 多年来一直位列 OWASP 十大关键 Web 应用程序安全风险列表,这凸显了它对 Web 安全构成的持续威胁。
CSRF 的更广泛背景
CSRF 存在于更广泛的 Web 应用程序安全威胁环境中,与 SQL 注入和 XSS 等漏洞并列。虽然其他攻击侧重于破坏数据或用户会话,但 CSRF 专门针对状态更改操作。对于那些通过简单的 GET 或 POST 请求执行敏感操作而没有额外验证的应用程序来说,CSRF 尤其危险。现代 Web 框架通常包含内置的 CSRF 保护,但开发人员必须理解并正确实施这些机制。
单页应用程序 (SPA) 和 RESTful API 的兴起改变了 CSRF 攻击的表现方式,但并未消除风险。即使 CORS (跨域资源共享) 策略盛行,CSRF 仍然是一个令人担忧的问题,因为它不需要读取响应——只需要发起请求。理解 CSRF 对于前端和后端开发人员都至关重要,因为预防需要客户端和服务器端组件之间的协调。
CSRF 的特点
- 利用已认证的会话 – 仅在用户登录到目标站点时有效。
- 无需代码执行 – 与 XSS 不同,它不需要将恶意脚本注入页面。
- 针对状态更改请求 – 侧重于修改数据的操作,而不仅仅是检索信息。
- 利用社会工程学 – 通常依赖于诱骗用户访问恶意页面或点击链接。
- 跨域工作 – 攻击源于与目标应用程序不同的站点。
- 依赖浏览器 – 依赖于浏览器如何处理 Cookie 和自动包含凭据。
CSRF 攻击的工作原理
典型的 CSRF 攻击遵循一个特定的序列,该序列利用了浏览器行为和应用程序信任。首先,攻击者识别目标应用程序中易受攻击的操作,例如更改电子邮件或资金转账的端点。然后,他们创建一个包含代码的恶意网页,当用户访问该页面时,该代码会自动向此端点提交一个请求。如果受害者登录了目标站点,他们的浏览器会将会话 Cookie 与此伪造的请求一起发送。
服务器将该请求视为合法,因为它带有有效的身份验证凭据。由于攻击是在后台发生的,用户可能在注意到未经授权的更改之前都不会意识到。下表概述了 CSRF 攻击的关键阶段,从准备到执行,以帮助可视化攻击流程。
阶段 | 描述 |
---|---|
目标识别 | 攻击者在 Web 应用程序中找到一个没有 CSRF 保护的易受攻击的操作,通常是状态更改操作。 |
恶意请求伪造 | 攻击者创建 HTML 或 JavaScript,当在受害者浏览器中执行时,会自动将请求发送到易受攻击的端点。 |
引诱受害者 | 攻击者通过网络钓鱼邮件或被入侵的网站等方式,诱骗受害者访问恶意页面。 |
请求执行 | 受害者浏览器将伪造的请求发送到目标站点,并附带用户的活动会话 Cookie。 |
服务器处理 | 目标服务器将请求视为合法,因为它附带有效的身份验证凭据。 |
防范 CSRF 攻击
有效的 CSRF 防范需要实施多种安全措施,这些措施共同作用以验证请求的合法性。最常见的方法是使用 CSRF 令牌——服务器生成的、包含在表单或标头中的唯一、不可预测的值。请求的处理必须使这些令牌在客户端和服务器之间匹配。另一种强大的方法是利用 SameSite Cookie 属性,该属性限制何时将 Cookie 与跨站请求一起发送。
其他防御措施包括要求对敏感操作进行重新身份验证、检查 Origin 或 Referer 标头以及为 API 请求实现自定义标头。Django、Rails 和 Spring Security 等现代 Web 框架提供了内置的 CSRF 保护,开发人员应启用并正确配置这些保护。关键在于采取纵深防御策略,而不是依赖单一解决方案,因为每一层都为不断演变的攻击技术提供了额外的安全性。
CSRF 防护技术
- CSRF 令牌 – 在服务器端验证的、用于每个状态更改请求的唯一、秘密值。
- SameSite Cookie – 限制将 Cookie 与跨站请求一起发送的 Cookie 属性。
- 双重提交 Cookie – 将令牌同时放在 Cookie 和请求的其他部分。
- 自定义请求标头 – 要求 API 请求包含无法跨域设置的特定标头。
- Origin/Referer 检查 – 验证请求是否来自预期的源。
- 用户交互要求 – 为敏感操作强制执行 CAPTCHA 或重新身份验证。
来源
在本文中,我们深入探讨了 CSRF (跨站请求伪造),探讨了它的定义、背景、特点、攻击方法、预防和防护技术。本综合指南为读者提供了理解和防御 Web 应用程序中 CSRF 漏洞所需的知识。
作者
所有安全术语列表。