【问题标题】:Was it possible to do CSRF attacks before CORS?是否有可能在 CORS 之前进行 CSRF 攻击?
【发布时间】:2019-01-16 20:13:56
【问题描述】:

我查看了 this 堆栈溢出答案以了解 CORS 预检请求。根据这个答案,当 CORS 不存在时,可以进行 CSRF 攻击。

但是查看“简单”请求的要求 需要预检,我看到仍然允许 POST。那可以改变 像 DELETE 一样声明和删除数据!

这是真的! CORS 不会保护您的站点免受 CSRF 攻击。然后 同样,如果没有 CORS,您也无法免受 CSRF 攻击。这 预检请求的目的只是限制您的 CSRF 暴露于 在 CORS 之前的世界中已经存在的东西。

但是,如果浏览器遵循Same Origin Policy,我想不出 CSRF 攻击的可能性。如果恶意站点试图访问另一个站点,浏览器会简单地阻止它,因为请求的来源不同。

如果没有 CORS,有人可以解释 CSRF 攻击是如何发生的吗?

【问题讨论】:

    标签: http security cors


    【解决方案1】:

    同源适用于 AJAX 请求之类的东西,但这不是触发 CSRF 攻击的唯一方式。

    举个例子:

    <form id="evilForm" method="post" action="http://example.com/delete_user.php">
        <input type="hidden" name="user_id" value="12345">
    </form>
    
    <script>
    document.getElementById('evilForm').submit();
    </script>
    

    【讨论】:

    • 感谢您的回答。您能否解释一下为什么同源策略仅适用于 AJAX 请求,而攻击者可以轻松地执行您的示例中的操作?我最初的理解是,防止 CSRF 有相同的来源政策。
    • 同源策略更关心客户端能够读取响应,而不是发出请求。对于&lt;form&gt; 帖子,任何客户端都不会读取响应。
    猜你喜欢
    • 2013-11-16
    • 1970-01-01
    • 2011-03-27
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 2010-12-20
    • 1970-01-01
    相关资源
    最近更新 更多