为啥浏览器在通过来自不同域的发帖尝试 CSRF 攻击时不会引发 CORS 错误? [关闭]
Posted
技术标签:
【中文标题】为啥浏览器在通过来自不同域的发帖尝试 CSRF 攻击时不会引发 CORS 错误? [关闭]【英文标题】:Why does the browser not throw a CORS error when trying out CSRF attack by posting through a from from different domain? [closed]为什么浏览器在通过来自不同域的发帖尝试 CSRF 攻击时不会引发 CORS 错误? [关闭] 【发布时间】:2021-09-09 12:14:24 【问题描述】:我正在尝试 Auth0 博客文章中的一些示例代码,Prevent Cross-Site Request Forgery (CSRF) Attacks。
正在设置两台服务器,一个位于localhost:3000
的易受攻击站点和位于localhost:4000
的攻击者站点。攻击者的站点使用隐藏表单向易受攻击的站点发出POST
请求,易受攻击的站点接受攻击者的数据。
我检查了攻击者的 POST 请求,origin 和 referer 头都是localhost:4000
。既然是向localhost:3000
发出请求,为什么浏览器不抛出CORS错误呢?
localhost:3000
服务器没有实现任何类型的 CORS 策略。
示例代码在 repo https://github.com/auth0-blog/csrf-sample-app.git.
【问题讨论】:
cors 不适用于localhost
一些余地吗?
归根结底,localhost:3000
不是一个受浏览器保护的网站,它是一个服务器。它负责执行任何形式的跨域保护。
【参考方案1】:
CORS 的目的是not to increase security,但允许新 种跨域通信。此代码中的方法(跨域表单发布)是一种旧类型的跨域请求,浏览器始终允许,并且明确排除了较新的 CORS 机制。
因为这种攻击一直都是可能的,所以网站一直需要 CSRF 保护来抵御它。我假设本文的作者专门选择了这种方法,以避免解释 CORS 协议带来的额外复杂性。
【讨论】:
以上是关于为啥浏览器在通过来自不同域的发帖尝试 CSRF 攻击时不会引发 CORS 错误? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章