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

2023-12-23

我们的 Web 应用程序的一个组件(或多或少)是 SPA。即它使用 JavaScript 运行,并且不会生成任何页面视图或刷新。这可能会导致 CSRF 令牌过时。特别是对于手机用户来说,他们可能会关闭浏览器并在几天/几周后打开它。此 SPA 有时需要将更新发布到服务器。

我们看到一些 javascript POST 请求生成 422 错误,并带有有关 CSRF 保护的警告。我非常确定 CSRF 令牌存在,但已过时。我正在努力寻找最好的解决办法。

如果我理解正确的话,并且根据OWASP CSRF 备忘单 https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet#Protecting_REST_Services:_Use_of_Custom_Request_Headers,只要 CORS 未在同一端点上打开,XHR 请求就应该是安全的。也就是说,恶意站点无法在没有 JavaScript 的情况下制作带有 XHR 标头的请求。对于 javascript,该请求应该被阻止,因为它是跨源的。

唯一的资源I found http://edgeapi.rubyonrails.org/classes/ActionController/RequestForgeryProtection.html有一个编写相当混乱的示例,其中对 json 禁用了 CSRF 保护。我不知道它是否建议这样做,或者避免它。

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


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

这是文档更改的片段我建议 https://github.com/rails/rails/pull/31640到导轨:

从 CSRF 保护中排除 XHR 请求通常是安全的 (就像上面的代码片段一样),因为 XHR 请求只能从 相同的起源。但请注意,任何跨源第三方域 允许通过CORS https://en.wikipedia.org/wiki/Cross-origin_resource_sharing还可以创建 XHR 请求。请务必检查您的 在禁用 XHR 的伪造保护之前将 CORS 白名单。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐