Web安全漏洞:跨站请求伪造(CSRF)
字数 784 2025-11-18 16:10:53

Web安全漏洞:跨站请求伪造(CSRF)

  1. 基本定义
    CSRF(Cross-Site Request Forgery)是一种恶意攻击方式。攻击者诱骗已登录用户在不知情的情况下,向当前已认证的Web应用提交非法操作请求。例如,用户登录银行网站后,在未退出的情况下访问恶意链接,该链接可能伪造一个转账请求并被浏览器自动发送,利用用户的登录状态完成非法操作。

  2. 攻击原理与必要条件

    • 用户已登录受信任网站:会话凭证(如Cookie)有效。
    • 用户触发恶意内容:通过点击链接、访问恶意页面等。
    • 请求自动携带凭证:浏览器默认在同源请求中附加Cookie。
      攻击者通过伪造请求(如隐藏的IMG标签、自动提交表单),利用浏览器的同源策略漏洞实现操作冒用。
  3. 典型攻击场景
    假设银行转账接口为 POST /transfer,参数为金额和收款账户。攻击者可构造以下恶意页面:

    <form action="https://bank.com/transfer" method="POST">
      <input type="hidden" name="amount" value="1000">
      <input type="hidden" name="to" value="attacker_account">
    </form>
    <script>document.forms[0].submit();</script>
    

    用户访问该页面时,浏览器自动携带银行Cookie提交表单,完成转账。

  4. 防御机制

    • Token验证:服务端生成随机Token嵌入表单或请求头,验证请求合法性。
    • 同源检测:校验HTTP请求头中的 OriginReferer 字段是否来自可信域名。
    • 双重Cookie验证:将Cookie值作为参数附加到请求中,服务端对比两者一致性。
    • 关键操作强制二次认证:如短信验证码、重新输入密码。
  5. 现代框架的自动防护
    主流Web框架(如Django、Spring Security)内置CSRF防护。例如Django通过中间件自动为表单添加Token,并验证POST请求的Token有效性。

  6. 与XSS的区别

    • XSS:利用用户对网站的信任,在页面注入恶意脚本窃取信息。
    • CSRF:利用网站对用户浏览器的信任,通过伪造请求执行操作。
      两者可能结合使用,如通过XSS获取CSRF Token以绕过防护。
Web安全漏洞:跨站请求伪造(CSRF) 基本定义 CSRF(Cross-Site Request Forgery)是一种恶意攻击方式。攻击者诱骗已登录用户在不知情的情况下,向当前已认证的Web应用提交非法操作请求。例如,用户登录银行网站后,在未退出的情况下访问恶意链接,该链接可能伪造一个转账请求并被浏览器自动发送,利用用户的登录状态完成非法操作。 攻击原理与必要条件 用户已登录受信任网站 :会话凭证(如Cookie)有效。 用户触发恶意内容 :通过点击链接、访问恶意页面等。 请求自动携带凭证 :浏览器默认在同源请求中附加Cookie。 攻击者通过伪造请求(如隐藏的IMG标签、自动提交表单),利用浏览器的同源策略漏洞实现操作冒用。 典型攻击场景 假设银行转账接口为 POST /transfer ,参数为金额和收款账户。攻击者可构造以下恶意页面: 用户访问该页面时,浏览器自动携带银行Cookie提交表单,完成转账。 防御机制 Token验证 :服务端生成随机Token嵌入表单或请求头,验证请求合法性。 同源检测 :校验HTTP请求头中的 Origin 或 Referer 字段是否来自可信域名。 双重Cookie验证 :将Cookie值作为参数附加到请求中,服务端对比两者一致性。 关键操作强制二次认证 :如短信验证码、重新输入密码。 现代框架的自动防护 主流Web框架(如Django、Spring Security)内置CSRF防护。例如Django通过中间件自动为表单添加Token,并验证POST请求的Token有效性。 与XSS的区别 XSS :利用用户对网站的信任,在页面注入恶意脚本窃取信息。 CSRF :利用网站对用户浏览器的信任,通过伪造请求执行操作。 两者可能结合使用,如通过XSS获取CSRF Token以绕过防护。