CSRF跨站请求伪造攻击与防护
字数 1121 2025-11-02 17:10:18

CSRF跨站请求伪造攻击与防护

描述
CSRF(Cross-Site Request Forgery)是一种恶意攻击方式,攻击者诱骗用户在已登录目标网站的情况下,执行非预期的操作(如修改密码、转账等)。其核心在于利用用户身份验证凭证的自动携带机制(如Cookie),通过伪造请求实施恶意行为。

攻击原理

  1. 用户登录信任网站(如银行网站):服务器返回身份验证Cookie,浏览器自动保存并在后续请求中携带。
  2. 用户访问恶意页面:攻击者通过邮件/论坛诱导用户访问包含恶意代码的页面。
  3. 伪造请求自动触发:恶意页面隐藏了伪造的请求(如<img src="http://bank.com/transfer?to=attacker&amount=1000">),浏览器自动发送请求并携带Cookie。
  4. 服务器误认为用户合法操作:因请求包含有效Cookie,服务器执行操作(如转账)。

防护措施

  1. 同源策略(SOP)限制:浏览器默认禁止跨域读取响应,但跨域请求仍可发送(如<img><form>标签),因此SOP无法完全阻止CSRF。

  2. CSRF Token验证

    • 原理:在关键请求(如POST)中携带随机Token(存在Session或Cookie中),服务端验证Token合法性。
    • 实现步骤
      • 用户访问页面时,服务端生成随机Token并存入Session,同时传递给前端(如隐藏表单字段)。
      • 前端提交请求时携带Token(如表单字段或请求头)。
      • 服务端比对请求中的Token与Session中的是否一致。
    • 关键点:Token需随机且保密,攻击者无法预测或窃取(因同源策略限制)。
  3. SameSite Cookie属性

    • 原理:设置Cookie的SameSite属性,限制跨域请求携带Cookie。
      • Strict:完全禁止跨域携带Cookie(可能导致用户体验问题)。
      • Lax(默认):允许部分安全请求(如GET)携带Cookie,阻止非安全请求(如POST)。
    • 示例Set-Cookie: sessionId=abc; SameSite=Lax;
  4. 验证Referer/Origin头

    • 检查请求头中的RefererOrigin字段是否来源于可信域名。
    • 局限性:某些场景下Referer可能被隐私设置过滤或伪造。
  5. 二次验证

    • 对敏感操作(如转账)要求用户重新输入密码或短信验证码。

总结
CSRF防护需结合多种措施:优先使用CSRF Token(适用于关键操作)和SameSite Cookie(减少依赖Token的场景),辅以其他验证手段。理解浏览器自动携带Cookie的机制是防御的关键。

CSRF跨站请求伪造攻击与防护 描述 CSRF(Cross-Site Request Forgery)是一种恶意攻击方式,攻击者诱骗用户在已登录目标网站的情况下,执行非预期的操作(如修改密码、转账等)。其核心在于 利用用户身份验证凭证的自动携带机制 (如Cookie),通过伪造请求实施恶意行为。 攻击原理 用户登录信任网站(如银行网站) :服务器返回身份验证Cookie,浏览器自动保存并在后续请求中携带。 用户访问恶意页面 :攻击者通过邮件/论坛诱导用户访问包含恶意代码的页面。 伪造请求自动触发 :恶意页面隐藏了伪造的请求(如 <img src="http://bank.com/transfer?to=attacker&amount=1000"> ),浏览器自动发送请求并携带Cookie。 服务器误认为用户合法操作 :因请求包含有效Cookie,服务器执行操作(如转账)。 防护措施 同源策略(SOP)限制 :浏览器默认禁止跨域读取响应,但 跨域请求仍可发送 (如 <img> 、 <form> 标签),因此SOP无法完全阻止CSRF。 CSRF Token验证 原理 :在关键请求(如POST)中携带随机Token(存在Session或Cookie中),服务端验证Token合法性。 实现步骤 : 用户访问页面时,服务端生成随机Token并存入Session,同时传递给前端(如隐藏表单字段)。 前端提交请求时携带Token(如表单字段或请求头)。 服务端比对请求中的Token与Session中的是否一致。 关键点 :Token需随机且保密,攻击者无法预测或窃取(因同源策略限制)。 SameSite Cookie属性 原理 :设置Cookie的 SameSite 属性,限制跨域请求携带Cookie。 Strict :完全禁止跨域携带Cookie(可能导致用户体验问题)。 Lax (默认):允许部分安全请求(如GET)携带Cookie,阻止非安全请求(如POST)。 示例 : Set-Cookie: sessionId=abc; SameSite=Lax; 验证Referer/Origin头 检查请求头中的 Referer 或 Origin 字段是否来源于可信域名。 局限性 :某些场景下Referer可能被隐私设置过滤或伪造。 二次验证 对敏感操作(如转账)要求用户重新输入密码或短信验证码。 总结 CSRF防护需结合多种措施:优先使用 CSRF Token (适用于关键操作)和 SameSite Cookie (减少依赖Token的场景),辅以其他验证手段。理解浏览器自动携带Cookie的机制是防御的关键。