是否有可能在 CORS 之前进行 CSRF 攻击?
Posted
技术标签:
【中文标题】是否有可能在 CORS 之前进行 CSRF 攻击?【英文标题】:Was it possible to do CSRF attacks before CORS? 【发布时间】:2019-01-16 20:13:56 【问题描述】:我查看了 this 堆栈溢出答案以了解 CORS 预检请求。根据这个答案,当 CORS 不存在时,可以进行 CSRF 攻击。
但是查看“简单”请求的要求 需要预检,我看到仍然允许 POST。那可以改变 像 DELETE 一样声明和删除数据!
这是真的! CORS 不会保护您的站点免受 CSRF 攻击。然后 同样,如果没有 CORS,您也无法免受 CSRF 攻击。这 预检请求的目的只是限制您的 CSRF 暴露于 在 CORS 之前的世界中已经存在的东西。
但是,如果浏览器遵循Same Origin Policy,我想不出 CSRF 攻击的可能性。如果恶意站点试图访问另一个站点,浏览器会简单地阻止它,因为请求的来源不同。
如果没有 CORS,有人可以解释 CSRF 攻击是如何发生的吗?
【问题讨论】:
【参考方案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 有相同的来源政策。 同源策略更关心客户端能够读取响应,而不是发出请求。对于<form>
帖子,任何客户端都不会读取响应。以上是关于是否有可能在 CORS 之前进行 CSRF 攻击?的主要内容,如果未能解决你的问题,请参考以下文章
为啥浏览器在通过来自不同域的发帖尝试 CSRF 攻击时不会引发 CORS 错误? [关闭]