【安全研发】CSRF (跨站请求伪造) 深度复盘与防御体系

【安全研发】CSRF (跨站请求伪造) 深度复盘与防御体系

记录时间: 2026-01-21
核心逻辑: 盗用身份。黑客拿不到我的 Cookie,但他能利用浏览器的自动机制,"借刀杀人"操作我的账户。


1. 攻击原理:浏览器是"内鬼"
  • 机制: 只要向目标域名发请求,浏览器会自动带上该域名的 Cookie。
  • 场景: 用户登录了银行网站,Cookie 尚未失效。用户在黑客网站点击了一个诱导链接/图片。
  • 后果: 黑客构造的转账请求被浏览器自动加上了 Cookie,服务器认为是用户本人操作,转账成功。
2. 防御体系:三道防线
2.1 黄金标准:CSRF Token
  • 原理: 除了 Cookie,要求请求必须携带一个随机生成的、黑客无法伪造的 Token(通常放在 Header 或 Hidden Field 中)。
  • 逻辑: Cookie 是浏览器自动带的(黑客能利用),Token 是前端代码手动带的(黑客跨域拿不到)。
  • 适用性: 所有 POST/PUT/DELETE 等改变数据的请求。
  • 原理: 在 Set-Cookie 时指定 SameSite 属性,告诉浏览器:"如果是跨站请求,别带我"。
  • 执法者: 浏览器。
  • 规则(Lax 模式):
    • 链接跳转 (Top-level Navigation): 允许带 Cookie(为了用户体验,免登录)。
    • 后台请求 (POST/Img/Iframe): 禁止带 Cookie。直接阻断 CSRF。
2.3 辅助防线:Origin / Referer 校验
  • 原理: 检查 HTTP 头里的来源地址。如果来源不是自家域名,直接拒绝。
  • 缺点: Referer 可能被伪造或被隐私插件屏蔽,只能作为兜底。

3. 深度思考:SameSite 与 RESTful 的强制绑定 (Critical!)

这是本次复盘的核心洞察:

如果使用 SameSite=Lax 作为防御手段,后端必须 严格遵守 RESTful 规范

  • 漏洞场景: 假如后端写了一个违规接口 GET /transfer?money=1000(用 GET 请求修改数据)。
  • 攻击向量: 黑客发一个链接 <a href="http://bank/transfer...">点我看美女</a>
  • 穿透逻辑: 用户点击链接 -> 触发顶级导航 (Top-level Navigation) -> 浏览器判断这是 GET 请求且地址栏变了 -> Lax 规则允许带 Cookie -> 攻击成功!
  • 结论: GET 请求必须是只读(Safe)的。 凡是涉及数据修改的操作,必须用 POST/PUT/DELETE,否则 SameSite=Lax 形同虚设。
相关推荐
不可求~12 小时前
多模型路由怎么落地:把任务分流写进项目的最小实现
java·前端·数据库
ynm11112 小时前
2026.7.19(3)【栅栏密码】传统知识+古典密码
安全·网络安全·buuctf
王维同学14 小时前
进程模块枚举、映像身份与线程启动地址关联
c++·windows·安全
AC赳赳老秦15 小时前
公开图片 OCR 数据提取:OpenClaw 合规采集公开信息图,识别文字与表格并转化为结构化数据
java·大数据·前端·数据库·python·php·openclaw
谢慧琼15 小时前
2026零基础做企业网站,低成本搭建官方网站
服务器·前端·javascript
吴声子夜歌16 小时前
网络安全——概述(一)
安全·web安全
weixin_4316004416 小时前
前端数据埋点(1):一次点击如何变成一条埋点
前端·js·数据埋点
IT_陈寒16 小时前
Python线程池吞了异常还不告诉我,这谁顶得住啊
前端·人工智能·后端
计算机魔术师17 小时前
同样是AI辅助建造,为什么有的游戏三个月就烂尾了?
前端
用户9210802628617 小时前
0. 做 Agent 产品,前端 AI 组件框架怎么选?
前端