我正在研究 HTML5 的安全问题。我看到了 Shreeraj Shah 所做的所有演讲。我尝试使用我自己的服务器模拟基本的 CSRF 攻击,使用 withCredentials 标记设置为 true(因此在响应消息中应该重播 cookie)并将 Content-Type 集添加到请求中的 text/plain (绕过预检调用) . 当我尝试开始攻击时,浏览器告诉我 XMLHttpRequest 由于 Access-Control-Allow-Origin 标头而无法完成。所以我在受害者网页的标题中放了一个 * ,浏览器告诉我,当我发送带有设置为 true 的请求时,我不能使用 * 字符。我试图用存储在同一个域中的网络应用程序做同样的事情,一切都很好(我想这是因为浏览器没有
我在问,这是现代浏览器最近为避免此类问题而设置的新功能?因为在 Shreeraj 的视频中,请求跨越不同的域,并且有效......
谢谢大家,对不起我的英语:-)
编辑:
我想我找到了 CSRF 攻击无法像 Shreeraj 的演示文稿中那样正常工作的原因。我阅读了 2010 年发布的上一个 CORS 文档,我发现当 Access-Control-Allow-Origin 设置为 * 时,没有任何关于 with credential flag 设置为 true 的建议,但是如果我们查看最后两个有关 CORS(2012 和 2013)的出版物,在第 6.1 节中,其中一个注释是如果 Access-Control-Allow-Origin 设置为 *,我们无法使用将凭据标志设置为 true 的请求。
以下是链接:
上一篇(2010):http ://www.w3.org/TR/2010/WD-cors-20100727/
最后两个(2012、2013):http ://www.w3.org/TR/2012/WD-cors-20120403/ --- http://www.w3.org/TR/cors/
这是我正在谈论的部分:http: //www.w3.org/TR/cors/#supports-credentials
如果我们查看以前的文档,我们找不到它,因为没有。
我认为这就是为什么今天 Shreeraj Shah 在 2012 年进行的简单 CSRF 攻击不起作用的原因(当然在遵循 w3c 建议的现代浏览器中)。可以吗?