我们的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保护是否安全/不安全?
解决方法
简短的回答是它是安全的,但你需要小心CORS.
以下是文档更改I suggested到rails的片段:
It is generally safe to exclude XHR requests from CSRF protection
(like the code snippet above does),because XHR requests can only be made from
the same origin. Note however that any cross-origin third party domain
allowed via 07001
will also be able to create XHR requests. Be sure to check your
CORS whitelist before disabling forgery protection for XHR.
请注意,我还没有收到rails团队关于此的任何反馈.