跨站请求伪造(CSRF)攻击详解
字数 1222 2025-11-05 08:32:05

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

1. 知识点描述
跨站请求伪造(CSRF)是一种恶意攻击方式。攻击者诱导用户在当前已登录的Web应用中执行非本意的操作。例如,用户登录银行网站后,在未退出的情况下访问了恶意链接,该链接可能自动发起转账请求,而浏览器会携带用户的登录凭证(如Cookie)完成操作。CSRF的本质是利用受害者的身份验证状态,以用户名义执行未经授权的请求


2. CSRF攻击的必要条件

  • 用户已登录目标网站(如银行、社交平台),会话未过期。
  • 用户访问了攻击者构造的恶意页面(如钓鱼邮件中的链接)。
  • 目标网站未部署有效的CSRF防护机制。

3. 攻击原理分步解析
步骤1:用户登录可信网站
用户通过浏览器登录example-bank.com,服务器返回包含会话ID的Cookie,浏览器会保存该Cookie。

步骤2:诱导用户访问恶意页面
攻击者构造一个隐藏的请求,并诱导用户访问(例如通过邮件或论坛嵌入的链接):

<!-- 恶意页面内容 -->
<img src="http://example-bank.com/transfer?to=attacker&amount=1000" width="0" height="0">

当用户访问此页面时,浏览器自动发送GET请求,并携带已保存的Cookie。

步骤3:服务器误认为用户自愿操作
服务器验证Cookie有效后,执行转账操作,攻击完成。

更隐蔽的POST请求示例

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

4. 防御措施详解
(1)同源策略(SOP)的局限性
同源策略阻止跨域读取响应,但不阻止跨域发送请求。因此恶意页面仍可发起请求(如表单提交),服务器仍可能处理。

(2)CSRF Token机制

  • 服务器为每个会话生成一个随机Token,嵌入表单或请求头中:
    <form action="/transfer" method="POST">
      <input type="hidden" name="csrf_token" value="随机字符串">
      <!-- 其他字段 -->
    </form>
    
  • 提交请求时,服务器验证Token是否匹配。恶意页面无法获取此Token(受SOP限制)。

(3)SameSite Cookie属性
设置Cookie的SameSite属性,限制跨站请求携带Cookie:

  • Strict:完全禁止跨站携带Cookie(可能影响用户体验)。
  • Lax:允许部分安全请求(如GET)携带Cookie,阻止非安全请求(如POST)。

(4)验证请求来源(Referer/Origin头)
服务器检查HTTP头中的RefererOrigin字段,确保请求来自同一域名。但需处理隐私模式下Referer缺失的情况。

(5)关键操作需二次确认
对于敏感操作(如转账),要求用户重新输入密码或验证码。


5. 实际场景示例

  • 防御配置示例(SameSite Cookie):
    服务器设置Cookie:Set-Cookie: sessionid=abc123; SameSite=Lax; HttpOnly
  • Token验证流程
    用户访问页面时,服务器动态生成Token并嵌入表单;提交后比对服务端存储的Token。

6. 总结
CSRF攻击利用的是浏览器的默认Cookie携带机制,防御核心是确保请求来自合法来源。结合Token、SameSite Cookie和来源验证,可有效防护此类攻击。

跨站请求伪造(CSRF)攻击详解 1. 知识点描述 跨站请求伪造(CSRF)是一种恶意攻击方式。攻击者诱导用户在当前已登录的Web应用中执行非本意的操作。例如,用户登录银行网站后,在未退出的情况下访问了恶意链接,该链接可能自动发起转账请求,而浏览器会携带用户的登录凭证(如Cookie)完成操作。CSRF的本质是 利用受害者的身份验证状态,以用户名义执行未经授权的请求 。 2. CSRF攻击的必要条件 用户已登录目标网站(如银行、社交平台),会话未过期。 用户访问了攻击者构造的恶意页面(如钓鱼邮件中的链接)。 目标网站未部署有效的CSRF防护机制。 3. 攻击原理分步解析 步骤1:用户登录可信网站 用户通过浏览器登录 example-bank.com ,服务器返回包含会话ID的Cookie,浏览器会保存该Cookie。 步骤2:诱导用户访问恶意页面 攻击者构造一个隐藏的请求,并诱导用户访问(例如通过邮件或论坛嵌入的链接): 当用户访问此页面时,浏览器自动发送GET请求,并携带已保存的Cookie。 步骤3:服务器误认为用户自愿操作 服务器验证Cookie有效后,执行转账操作,攻击完成。 更隐蔽的POST请求示例 : 4. 防御措施详解 (1)同源策略(SOP)的局限性 同源策略阻止跨域读取响应,但 不阻止跨域发送请求 。因此恶意页面仍可发起请求(如表单提交),服务器仍可能处理。 (2)CSRF Token机制 服务器为每个会话生成一个随机Token,嵌入表单或请求头中: 提交请求时,服务器验证Token是否匹配。恶意页面无法获取此Token(受SOP限制)。 (3)SameSite Cookie属性 设置Cookie的 SameSite 属性,限制跨站请求携带Cookie: Strict :完全禁止跨站携带Cookie(可能影响用户体验)。 Lax :允许部分安全请求(如GET)携带Cookie,阻止非安全请求(如POST)。 (4)验证请求来源(Referer/Origin头) 服务器检查HTTP头中的 Referer 或 Origin 字段,确保请求来自同一域名。但需处理隐私模式下Referer缺失的情况。 (5)关键操作需二次确认 对于敏感操作(如转账),要求用户重新输入密码或验证码。 5. 实际场景示例 防御配置示例 (SameSite Cookie): 服务器设置Cookie: Set-Cookie: sessionid=abc123; SameSite=Lax; HttpOnly Token验证流程 : 用户访问页面时,服务器动态生成Token并嵌入表单;提交后比对服务端存储的Token。 6. 总结 CSRF攻击利用的是 浏览器的默认Cookie携带机制 ,防御核心是确保请求来自合法来源。结合Token、SameSite Cookie和来源验证,可有效防护此类攻击。