2016-11-20 70 views
4

我们的webapp的一个组件是(或多或少)SPA。即它使用javascript运行,并且不会生成任何页面查看或刷新。这可能会导致CSRF令牌过时。尤其是对于手机用户而言,他们可能会在几天/几周后关闭浏览器并将其打开。此SPA偶尔需要POST更新到服务器。绕过XHR的CSRF保护安全吗? (Rails)

我们看到,产生一个422错误一些JavaScript POST请求,具有约CSRF保护警告。我很确定CSRF令牌是存在的,但是陈旧。我试图找到最好的方法。

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

唯一的资源I found有一个比较容易混淆的编写例子CSRF保护为JSON禁用。我无法确定它是建议这样做还是避免它。

是否因此安全/不安全关闭未启用CORS用于在轨道上XHR/JSON请求CSRF保护?

+0

我创建了一个PR来更新Rails文档。请参阅https://github.com/rails/rails/pull/31640 – gingerlime

回答

0

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

下面是从文档片段改变我suggested到轨:

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

请注意,我还没有从铁路团队有关于此的任何反馈。