首页 > 解决方案 > CSRF 使用 AJAX。为什么有可能?

问题描述

重现步骤:

  1. 转到https://stackoverflow.com/
  2. 在 Web 浏览器中打开开发者控制台
  3. 执行以下JS代码:

    fetch(`https://webhook.site/5a6f8001-3646-4b3e-bd76-a4562af5a9ef`, { credentials: 'include' })
    
  4. 转到https://webhook.site/#!/5a6f8001-3646-4b3e-bd76-a4562af5a9ef

您应该在https://webhook.site上看到 HTTP 请求

为什么 HTTP 请求会到达服务器?这是否违反同源政策?

标签: ajaxsecuritycsrfsame-origin-policywebsecurity

解决方案


首先,不要混用 SOP、CORS 和 CSRF。

  1. SOP(同源策略)检查由浏览器执行,有助于保护“其他”源访问的源中的资源。如果需要允许他们阅读您的内容,您需要定义规则以扩展到称为CORS的限制。

  2. CSRF(跨站请求伪造)是一种通过受害者的 cookie 帮助创建或发送恶意无效请求的攻击。使用受害者的 cookie 到达目标源后的每个请求都将通过该用户的许可执行。因此,攻击者不会读取响应。此外,由于Same Origin Policy规则,您无法读取响应,除非它们不允许使用CORS 规则读取其内容。


推荐阅读