此问题仅与防止跨站点请求伪造攻击有关。
具体来说,它是:通过Origin标头(CORS)进行的保护是否与通过CSRF令牌进行的保护一样好?
例:
- 爱丽丝使用她的浏览器(使用cookie)登录到“ https://example.com ”。我认为她使用的是现代浏览器。
- 爱丽丝访问“ https://evil.com ”,evil.com的客户端代码对“ https://example.com ” 执行某种请求(经典CSRF场景)。
所以:
- 如果我们不检查Origin头(服务器端),也没有CSRF令牌,则我们有一个CSRF安全漏洞。
- 如果我们检查CSRF令牌,我们是安全的(但这有点乏味)。
- 如果我们确实检查了Origin标头,则应与使用CSRF令牌时一样阻止evil.com客户端代码的请求-除了,除非evil.com的代码可以某种方式设置Origin标头。
我知道,如果使用XHR(例如,跨域资源共享的安全性),这应该是不可能的,至少不能,如果我们相信W3C规范可以在所有现代浏览器中正确实现的话(可以吗?)
但是其他类型的请求呢?例如表单提交?加载脚本/ img / ...标签?还是页面可以用来(合法)创建请求的任何其他方式?还是一些已知的JS hack?
注意:我不是在说
- 本机应用程序
- 操纵的浏览器
- example.com页面上的跨站点脚本错误,
- ...
Origin
?那会否定CORS的保护。