绕过XHR的CSRF保护是否安全? (导轨)

时间:2016-11-20 16:22:07

标签: javascript ruby-on-rails xmlhttprequest cors csrf

我们的webapp的一个组件是(或多或少)SPA。即它使用javascript运行,并且不会生成任何页面查看或刷新。这可能导致CSRF令牌过时。特别是对于移动电话用户,可能会在几天/几周后关闭浏览器并打开它。此SPA偶尔需要POST更新到服务器。

我们看到一些生成422错误的javascript POST请求,并提供有关CSRF保护的警告。我很确定CSRF令牌存在,但是陈旧。我正试图找到解决问题的最佳方法。

如果我理解正确,并且根据OWASP CSRF Cheat Sheet,只要CORS在同一端点上没有打开,XHR请求就应该是安全的。也就是说,恶意站点无法在没有javascript的情况下使用XHR头创建请求。使用javascript,请求应该被阻止,因为它是跨域的。

唯一的资源I found有一个相当容易混淆的例子,其中json禁用了CSRF保护。我无法确定它是建议这样做还是避免它。

因此,在未启用CORS的rails上关闭XHR / json请求的CSRF保护是否安全/不安全?

1 个答案:

答案 0 :(得分:0)

简短的回答是 是安全的,但你需要小心CORS。

以下是文档更改I suggested到rails:

的摘录
  

从CSRF保护中排除XHR请求通常是安全的   (就像上面的代码片段一样),因为XHR请求只能来自   相同的起源。但请注意,任何跨域第三方域   允许通过CORS   也将能够创建XHR请求。一定要检查你的   在禁用XHR的伪造保护之前CORS白名单。

请注意,我还没有收到rails团队关于此的任何反馈。