首页/安全/漏洞与攻击面速查/CSRF 跨站请求伪造原理与防护
Web 漏洞原理与防护55 条

CSRF 跨站请求伪造原理与防护

CSRF 利用浏览器自动携带 Cookie 的特性,诱导已登录用户在不知情下发出状态变更请求;防护以同步令牌与 SameSite Cookie 为主,辅以 Origin/Referer 校验。

漏洞与攻击面速查安全更新于 2026-10-13

CSRF 是什么

CSRF(跨站请求伪造)利用的是浏览器会自动携带 Cookie 这一行为:用户登录站点 A 后访问攻击者页面,该页面构造出对站点 A 的请求,浏览器自动附上会话 Cookie,服务端只看到「已登录的用户发起了请求」,于是转账、改密、绑定邮箱这类操作在用户不知情时被执行。它的成因是接口只凭 Cookie 判断身份,却没有判断这次请求是否由本站页面有意发起,因此防护核心是让请求携带攻击者无法伪造的凭据,或让浏览器不自动携带身份凭据。

基本信息

风险类别OWASP Top 10 2021 A01 失效的访问控制;CWE-352
成因接口仅凭 Cookie 鉴权,不校验请求来源意图
影响以受害者身份完成转账、改密、绑定等操作
主防护CSRF Token:与会话绑定、每次校验
辅助SameSite Cookie、Origin 校验、敏感操作二次确认
判断口径有副作用的请求都算风险点,GET 不应产生副作用

典型场景

  • 后台管理系统的增删改接口仅凭会话 Cookie 鉴权
  • 修改邮箱、手机号与密码等账号安全相关操作
  • 绑定与解绑第三方账号、授权应用范围变更
  • 文件上传与删除接口,被利用可篡改站点内容
  • 以 GET 实现的删除与状态变更链接,最容易被图片标签触发
  • 内网管理平台鉴权弱但影响面大,常被忽略

防护选择顺序

防护选择顺序
1. 状态变更接口全部使用 POST/PUT/DELETE,并校验 CSRF Token
2. Cookie 设 SameSite=Lax 起步,高敏感后台评估 Strict
3. 请求带 Origin 头时进行校验
4. 转账改密等敏感操作叠加二次认证
# 令牌要与会话绑定并一次性使用,不能仅靠随机字符串复用
# 前后端分离站点把令牌放在自定义请求头里,同时要求接口不接受跨站表单提交

防护手段对照

手段适用场景局限
CSRF Token所有状态变更接口需要全量改造,漏一个接口就留缺口
SameSite Cookie浏览器端会话老浏览器兼容性与跨站登录流程需评估
Origin 与 Referer 校验作为补充判断头部可能缺失或被代理改写
自定义请求头前后端分离的 JSON 接口依赖前端统一封装请求
二次确认与二次认证资金与账号安全操作影响体验,需分级使用
GET 请求不应产生副作用:delete 类接口应先改成 POST,否则无法用令牌机制完整保护。
跨站登录回调、支付回跳等业务链条本身就需要跨站请求,上线 SameSite=Strict 前要先跑通这些流程,必要时在个别路径上单独放宽。

易错点

  • 只给登录接口加令牌而漏掉文件上传、改邮箱等接口:所有状态变更点都要覆盖
  • 令牌与会话不绑定:攻击者用自己的会话令牌诱导他人提交即可绕过,校验必须关联当前用户
  • 只靠 Referer 校验:代理、隐私设置与旧浏览器可能不发送该头,只能作为辅助
  • 把 JSON 接口视为天然免疫:表单提交限制能拦住一部分场景,但不能替代令牌机制
  • 复测只验证正常提交成功:安全验证要覆盖缺令牌、错令牌、他人令牌三类请求
  • 内部管理平台默认不加固:这类系统一旦被突破,影响范围与数据敏感度都更高

数据来源与参考

  • OWASP CSRF Prevention Cheat Sheet
  • MDN SameSite Cookie 文档
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌