You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过模拟用户流程绕过基于令牌的CSRF防护是否可行?

关于双重提交CSRF防护机制的绕过疑问解答

背景:bank.com的CSRF防护流程

  • 正常用户流程:

    1. 用户通过bank.com/login登录,服务器设置会话Cookie和CSRF Cookie
    2. 用户发送GET请求到bank.com/transfer_form(浏览器自动携带会话Cookie),获取包含CSRF令牌隐藏字段的转账表单
    3. 用户提交POST请求到bank.com/transfer?to=Bob&amount=1000&CSRF=XXXX完成转账
  • 防护核心逻辑:恶意站点evil.com无法直接构造有效转账请求,因为它无法获取与用户当前会话绑定的CSRF令牌值

你的疑问:为什么模拟用户流程的绕过思路不成立?

你提出的绕过步骤:

  1. 用户访问evil.com
  2. evil.com通过AJAX向bank.com/transfer_form发送GET请求获取CSRF令牌
  3. 使用获取到的令牌发送POST转账请求到bank.com

这个思路无法实现,核心原因并非仅依赖SameSite Cookie和CORS策略,双重提交CSRF防护本身的设计就会阻断攻击,具体如下:

1. 同源策略(SOP)的直接限制

浏览器的同源策略会禁止evil.com的JavaScript读取bank.com/transfer_form请求的响应内容。即使浏览器会自动携带用户的会话Cookie去请求bank.com/transfer_form,服务器返回了含CSRF令牌的页面,但evil.com的脚本根本拿不到令牌值——同源策略直接阻断跨域响应的读取操作。

2. 令牌与会话的绑定验证

双重提交CSRF防护的核心是令牌值与用户会话强绑定:

  • 服务器生成的CSRF令牌会和当前用户会话关联(要么存在服务端会话存储,要么CSRF Cookie的值与请求中的令牌值对应)
  • 即使恶意站点绕过同源策略拿到令牌(实际不可能),只要请求的会话上下文和令牌不匹配,服务器依然会拒绝请求。而恶意站点无法伪造会话上下文,因为会话Cookie由浏览器自动携带,且跨域场景下的Cookie发送也受限制。

关于你观点的纠正

你认为“仅SameSite Cookie属性和CORS策略能阻止该流程”的说法不准确:

  • 同源策略是最基础的屏障,在SameSite和CORS出现之前,双重提交CSRF防护就已经通过“令牌+会话绑定+同源策略”的组合实现有效防护
  • SameSite Cookie是额外的防护层,进一步限制跨域请求中Cookie的发送;CORS是用来放宽同源策略的机制,而非阻止攻击——正确配置的CORS会拒绝evil.com的跨域请求,但它不是CSRF防护的核心依赖

简言之,双重提交CSRF防护本身是有效的,核心逻辑是让恶意站点无法获取与当前用户会话绑定的令牌,浏览器同源策略是实现这个逻辑的关键保障,SameSite和CORS只是额外的加固手段,而非唯一防护措施。


内容的提问来源于stack exchange,提问作者Ali_MM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 10:13:25