常见漏洞验证121 条

CSRF 验证方法

检查关键状态变更操作(改密、转账、加权限、绑定手机)是否仅依赖会话 Cookie 鉴权:无凭据的跨站请求能否被受理是判断核心。

CSRF 验证是什么

CSRF(Cross-Site Request Forgery,跨站请求伪造)的本质是:浏览器会自动携带目标站点的会话 Cookie,攻击者只要诱导受害者在登录状态下发出一个构造好的请求,就能以受害者身份执行状态变更操作。判断核心在于服务端是否只凭 Cookie 就受理请求,还是额外校验了 CSRF Token、SameSite 属性或自定义请求头。验证时选低影响、可撤销的操作,例如给自己加一个标签,先正常提交建立基线,再移除 Token 或自定义头重放,看服务端是否仍然受理。只验证到受理与否,不实际造成业务后果。

基本信息

风险类型跨站请求伪造,CWE-352
判断点是否校验 CSRF Token 或同源标记
关注对象表单、AJAX 接口、一键操作链接
缓解手段同步令牌、双提交 Cookie、SameSite=Lax/Strict
验证边界只验证受理或拒绝,不造成真实业务变更

典型使用场景

  • 改密与绑定:修改密码、绑定手机号、改邮箱等敏感表单
  • 资金与额度:转账、下单、提现类接口(属高风险,仅做设计核查)
  • 权限管理:加权限、改角色、邀请成员
  • 一键操作:订阅、点赞、删除这类无二次确认的链接
  • JSON 接口:Content-Type 为 application/json 的接口常被误认为天然免疫

验证步骤

验证步骤
1. 选一个低影响、可撤销的状态变更操作作为验证对象
2. 正常提交一次,记录请求头、Cookie 与 Token 位置
3. 移除请求中的 Token 或自定义头后重新提交
4. 观察服务端是否仍受理(与正常请求响应对比)
5. 记录请求构造方式与结果,恢复测试数据

防护强度对照

防护方式有效性说明
无 Token 校验无只依赖 Cookie,跨站请求会被受理
SameSite=Lax部分能挡大部分跨站 POST,顶层 GET 导航仍带 Cookie
SameSite=Strict较强跨站场景不带 Cookie,可能影响外站跳转体验
同步令牌较强Token 随表单或头部提交,服务端逐次比对
双提交 Cookie较强Cookie 与请求参数中的 Token 需一致
修复视角:同步令牌(每会话或每表单)与双提交 Cookie 是主流方案;SameSite 属性可显著降低风险,但需结合兼容性与跳转场景评估,不能单独当作修复。
不要在验证中使用转账、删除、发消息这类高影响操作,容易造成真实业务副作用;优先选择可撤销、可回滚的动作。

易错点

  • 只测 GET 表单,漏掉 JSON 接口的鉴权方式差异,application/json 并不天然免疫
  • 用高影响操作做验证,造成真实业务副作用,应改用可撤销的低风险动作
  • 把 SameSite 视为完全修复,忽略顶层导航仍携带 Cookie 的情况
  • 验证后未恢复测试数据,留下业务脏数据

数据来源与参考

  • OWASP WSTG WSTG-SESS-05
  • OWASP Cheat Sheet:CSRF Prevention
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌