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