CSRF(跨站请求伪造)
CSRF 利用浏览器自动携带身份凭证的特性,诱导用户在不知情情况下向目标网站发起请求。本文结合最新浏览器策略(SameSite 默认 Lax)、前后端协同防御、AI 自动化攻防的新趋势进行梳理。
攻击流程
- 受害者在目标网站登录并持有有效 Cookie/Token。
- 攻击者构造恶意页面或邮件,诱导受害者点击或加载。
- 浏览器在访问攻击者页面的同时向目标网站发起请求,并自动携带 Cookie。
- 若目标网站缺乏防护,攻击成功执行修改密码、转账等敏感操作。
常见载体
- 隐藏表单 + 自动提交
- 图片、脚本、iframe 重定向(GET/POST)
<link rel="prefetch">
、fetch
、XMLHttpRequest
(同站请求)- 在 AI 机器人/自动化测试中触发接口(提示词诱导)
防御策略
1. 同源策略 + SameSite Cookie
- 为 Cookie 设置
SameSite=Lax
或Strict
,可阻断绝大多数跨站表单/链接攻击。 - 对于必须跨站的场景(如嵌入式登录),使用
SameSite=None; Secure
,但需配合 Token 校验。
2. CSRF Token(同步 Token 模式)
- 服务端在页面/接口返回随机 Token,存储在 Cookie 外的存储(
localStorage
、meta
、隐藏字段)。 - 前端发起请求时在
X-CSRF-Token
、表单字段中携带。 - 服务端校验 Token 与 session/user 绑定关系。
3. 双重 Cookie 校验(Double Submit Cookie)
- 将 Token 同时写入 Cookie 和请求头/体,服务端比对两者是否一致。
- 无需保持服务器状态,适合无状态服务。
4. 自定义请求头 / JSON API
- 将敏感操作限制为
XMLHttpRequest
/fetch
,并要求携带自定义头(如X-Requested-With
)。 - 配置 CORS
Access-Control-Allow-Origin
为白名单,拒绝跨域非简单请求。
5. 用户交互确认
- 对关键操作加入确认弹窗、二次验证(验证码、短信、MFA)。
- 对转账/修改设置等操作加入风控审批流程。
6. 防止点击/脚本诱导
- 配合点击劫持防护(
X-Frame-Options
、frame-ancestors
)。 - 使用
Referrer-Policy
、Origin
校验确保来源可信。
7. AI & 自动化风险
- 对对外暴露的接口设置速率限制、IP 黑名单、Bot 检测。
- 对 AI 助手/脚本的操作限制权限,并记录审计日志。
实践建议
- 对所有具有副作用的 POST/PUT/PATCH/DELETE 接口启用 Token 校验。
- 配置 Cookie:
Secure; HttpOnly; SameSite=Lax
(或更严格)。 - 采用统一的请求封装,在前端框架中自动附带 CSRF Token。
- 定期渗透测试:利用 Burp Suite、OWASP ZAP 等工具模拟 CSRF。
- 对第三方嵌入、iframe、SDK 接入进行安全评估。
参考资料
- OWASP CSRF Prevention Cheat Sheet
- Mozilla Web Security Guidelines / Chrome SameSite Updates
- 《Web 安全攻防实践》相关章节
与 XSS 防护协同非常重要:XSS 可窃取 CSRF Token,因此需从输入输出、Cookie 管理、Token 策略等多方面构建综合防线。
↑