javascript - 绕过 XHR 的 CSRF 保护是否安全? ( rails )

标签 javascript ruby-on-rails xmlhttprequest cross-domain csrf

我们网络应用程序的一个组件(或多或少)是一个 SPA。即它使用 javascript 运行,并且不会生成任何页面 View 或刷新。这可能会导致 CSRF token 过时。特别是对于手机用户,他们可能会关闭浏览器并在几天/几周后打开它。此 SPA 偶尔需要向服务器发布更新。

我们看到一些 javascript POST 请求生成 422 错误,并带有有关 CSRF 保护的警告。我很确定 CSRF token 存在,但已过时。我正试图找到解决它的最佳方法。

如果我理解正确,并且根据OWASP CSRF Cheat Sheet ,只要 CORS 未在同一端点上打开,XHR 请求就应该是安全的。也就是说,恶意站点无法在没有 javascript 的情况下使用 XHR header 制作请求。对于 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 CORS will also be able to create XHR requests. Be sure to check your CORS whitelist before disabling forgery protection for XHR.

请注意,我还没有收到 Rails 团队的任何反馈。

关于javascript - 绕过 XHR 的 CSRF 保护是否安全? ( rails ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40706394/

相关文章:

javascript - 在循环外访问循环的一项

javascript - 获取倒数第二个斜杠的值

javascript - 如何在 Highcharts 的图例中显示情节线?

ruby-on-rails - 无法在 AWS 中安装 postgres

javascript - 从 3.0 之前的 servlet 的 FormData api 检索请求参数,其中不支持 request.part

cookies - hls.js CORS 使用 AWS Cloudfront 问题与 Cookies

javascript - 通过特定坐标将 DIV/Span 标签应用于单词

ruby-on-rails - Ruby on Rails内容管理系统?

ruby-on-rails - Bundler 找不到 gem "activerecord": 的兼容版本

JavaScript var 位于函数之外