跨站请求伪造(CSRF)攻击详解
字数 814 2025-11-08 20:56:49

跨站请求伪造(CSRF)攻击详解

描述
跨站请求伪造(CSRF)是一种利用用户已登录的身份,在用户不知情的情况下执行非预期操作的攻击。例如,用户登录银行网站后,访问恶意页面,该页面可能自动触发转账请求。由于浏览器会自动携带用户的Cookie,服务器会误认为是用户的自愿操作。CSRF的核心问题在于:服务器无法区分请求是来自用户真实意图还是恶意诱导

攻击原理

  1. 依赖条件

    • 用户已登录目标网站(如银行网站),会话Cookie有效。
    • 用户访问恶意页面(如钓鱼邮件中的链接)。
    • 目标网站未部署CSRF防护措施。
  2. 攻击过程

    • 恶意页面隐藏一个自动提交的表单或发送AJAX请求,指向目标网站的敏感接口(如修改密码的URL)。
    • 浏览器发起请求时自动附加用户的Cookie,服务器验证会话后执行操作。

示例场景
假设银行转账接口为:

POST /transfer HTTP/1.1  
Host: bank.com  
Content-Type: application/x-www-form-urlencoded  

to_account=attacker&amount=1000

攻击者构造一个隐藏表单的页面:

<form action="http://bank.com/transfer" method="POST" id="csrf-form">  
  <input type="hidden" name="to_account" value="attacker">  
  <input type="hidden" name="amount" value="1000">  
</form>  
<script>document.getElementById('csrf-form').submit();</script>

用户访问该页面时,转账请求自动发送。


防御措施

  1. CSRF Token(最常用)

    • 服务器生成随机Token(如会话绑定),嵌入表单或请求头(如自定义Header)。
    • 提交请求时验证Token合法性,恶意页面无法获取Token(受同源策略限制)。
  2. SameSite Cookie属性

    • 设置Cookie的SameSite=StrictLax,限制第三方网站发起请求时携带Cookie。
  3. 验证Referer/Origin头

    • 检查请求来源域名是否在白名单内,但可能被某些浏览器或插件绕过。
  4. 二次确认

    • 敏感操作要求用户重新输入密码或验证码。

对比CSRF与XSS

  • XSS:利用用户对网站的信任,在网站中注入恶意脚本。
  • CSRF:利用网站对用户浏览器的信任,诱导用户发起请求。

实际部署建议

  • 关键操作(如转账、改密)优先使用CSRF Token+SameSite Cookie组合防护。
  • 避免仅依赖Referer检查,因其可靠性受环境影响。
跨站请求伪造(CSRF)攻击详解 描述 跨站请求伪造(CSRF)是一种利用用户已登录的身份,在用户不知情的情况下执行非预期操作的攻击。例如,用户登录银行网站后,访问恶意页面,该页面可能自动触发转账请求。由于浏览器会自动携带用户的Cookie,服务器会误认为是用户的自愿操作。CSRF的核心问题在于: 服务器无法区分请求是来自用户真实意图还是恶意诱导 。 攻击原理 依赖条件 : 用户已登录目标网站(如银行网站),会话Cookie有效。 用户访问恶意页面(如钓鱼邮件中的链接)。 目标网站未部署CSRF防护措施。 攻击过程 : 恶意页面隐藏一个自动提交的表单或发送AJAX请求,指向目标网站的敏感接口(如修改密码的URL)。 浏览器发起请求时自动附加用户的Cookie,服务器验证会话后执行操作。 示例场景 : 假设银行转账接口为: 攻击者构造一个隐藏表单的页面: 用户访问该页面时,转账请求自动发送。 防御措施 CSRF Token(最常用) : 服务器生成随机Token(如会话绑定),嵌入表单或请求头(如自定义Header)。 提交请求时验证Token合法性,恶意页面无法获取Token(受同源策略限制)。 SameSite Cookie属性 : 设置Cookie的 SameSite=Strict 或 Lax ,限制第三方网站发起请求时携带Cookie。 验证Referer/Origin头 : 检查请求来源域名是否在白名单内,但可能被某些浏览器或插件绕过。 二次确认 : 敏感操作要求用户重新输入密码或验证码。 对比CSRF与XSS : XSS:利用用户对网站的信任,在网站中注入恶意脚本。 CSRF:利用网站对用户浏览器的信任,诱导用户发起请求。 实际部署建议 : 关键操作(如转账、改密)优先使用CSRF Token+SameSite Cookie组合防护。 避免仅依赖Referer检查,因其可靠性受环境影响。