CSRF跨站请求伪造攻击详解
字数 990 2025-11-03 00:19:05

CSRF跨站请求伪造攻击详解

描述
CSRF(Cross-Site Request Forgery)是一种恶意利用网站身份验证机制的攻击。攻击者诱骗已登录用户在当前会话状态下,在不知情时向信任网站提交恶意请求(如转账、改密码)。其核心在于利用浏览器自动携带Cookie的特性,让用户"被代表"执行非本意操作。

攻击原理分步解析

  1. 身份验证依赖:用户登录A网站后,服务端返回的Session Cookie会被浏览器自动存储,并在后续请求中自动附加
  2. 会话保持漏洞:只要用户未登出或会话未过期,浏览器发起任何指向A网站的请求都会携带有效Cookie
  3. 伪造请求构造:攻击者创建隐藏表单、恶意图片链接等,包含修改数据的关键参数(如transfer?to=attacker&amount=1000
  4. 诱骗触发:通过邮件/论坛等渠道使用户访问恶意页面,浏览器自动执行请求并携带合法Cookie,服务端误判为用户自愿操作

典型攻击场景示例
假设银行网站转账接口为:

POST /transfer HTTP/1.1  
Cookie: session=user_session_id  
Content-Type: application/x-www-form-urlencoded  

to_account=ATTACKER&amount=10000

攻击者构造恶意页面:

<img src="http://bank.com/transfer?to_account=ATTACKER&amount=10000" />
<!-- 或隐藏表单 -->
<body onload="document.forms[0].submit()">
  <form action="http://bank.com/transfer" method="POST">
    <input type="hidden" name="to_account" value="ATTACKER">
    <input type="hidden" name="amount" value="10000">
  </form>
</body>

防御措施分层详解

  1. 同源策略检查:服务端验证HTTP请求头中的Origin/Referer字段,确保请求来源与目标域名一致
  2. CSRF Token防护
    • 服务端生成随机Token(如csrftoken=abc123)存入Session并嵌入表单(或Meta标签)
    • 提交请求时要求携带Token,服务端校验其与会话中存储的是否匹配
    • 关键:Token需随机化、绑定会话、每次更新(重要操作需刷新)
  3. 双重Cookie验证:将Cookie中的值作为参数附加到请求中,服务端比较Cookie与参数值是否一致
  4. 关键操作强化
    • 敏感操作要求二次认证(密码、短信验证码)
    • 使用自定义Header(需配合CORS配置)
  5. 浏览器防护
    • SameSite Cookie属性(Strict/Lax限制第三方Cookie携带)
    • 关键接口使用JSON API并避免GET请求修改数据

进阶防护思路

  • 用户交互验证:添加滑动验证码/行为验证码增加攻击成本
  • 请求指纹校验:结合User-Agent/IP地址等生成请求指纹
  • 关键操作日志:记录操作IP、时间、设备信息用于异常追溯

通过组合防御策略(如Token+SameSite Cookie),可有效阻断CSRF攻击链。核心在于确保请求的"真实性"而非仅"合法性"。

CSRF跨站请求伪造攻击详解 描述 CSRF(Cross-Site Request Forgery)是一种恶意利用网站身份验证机制的攻击。攻击者诱骗已登录用户在当前会话状态下,在不知情时向信任网站提交恶意请求(如转账、改密码)。其核心在于利用浏览器自动携带Cookie的特性,让用户"被代表"执行非本意操作。 攻击原理分步解析 身份验证依赖 :用户登录A网站后,服务端返回的Session Cookie会被浏览器自动存储,并在后续请求中自动附加 会话保持漏洞 :只要用户未登出或会话未过期,浏览器发起任何指向A网站的请求都会携带有效Cookie 伪造请求构造 :攻击者创建隐藏表单、恶意图片链接等,包含修改数据的关键参数(如 transfer?to=attacker&amount=1000 ) 诱骗触发 :通过邮件/论坛等渠道使用户访问恶意页面,浏览器自动执行请求并携带合法Cookie,服务端误判为用户自愿操作 典型攻击场景示例 假设银行网站转账接口为: 攻击者构造恶意页面: 防御措施分层详解 同源策略检查 :服务端验证HTTP请求头中的Origin/Referer字段,确保请求来源与目标域名一致 CSRF Token防护 : 服务端生成随机Token(如 csrftoken=abc123 )存入Session并嵌入表单(或Meta标签) 提交请求时要求携带Token,服务端校验其与会话中存储的是否匹配 关键:Token需随机化、绑定会话、每次更新(重要操作需刷新) 双重Cookie验证 :将Cookie中的值作为参数附加到请求中,服务端比较Cookie与参数值是否一致 关键操作强化 : 敏感操作要求二次认证(密码、短信验证码) 使用自定义Header(需配合CORS配置) 浏览器防护 : SameSite Cookie属性(Strict/Lax限制第三方Cookie携带) 关键接口使用JSON API并避免GET请求修改数据 进阶防护思路 用户交互验证:添加滑动验证码/行为验证码增加攻击成本 请求指纹校验:结合User-Agent/IP地址等生成请求指纹 关键操作日志:记录操作IP、时间、设备信息用于异常追溯 通过组合防御策略(如Token+SameSite Cookie),可有效阻断CSRF攻击链。核心在于确保请求的"真实性"而非仅"合法性"。