关于更新 Rails CSRF 防护 Wiki 文档的提案
该关于缓解 CVE-2025-9284 的 wiki 页面 已过时。我们应该更新建议,以符合 @jkowens 原来提出的建议(来源)。
目前,wiki 建议 Rails 开发人员使用 omniauth-rails_csrf_protection 插件来缓解漏洞。然而,该插件的 README 现在指出:
OmniAuth 自 版本 2.0.0 起就提供了内置的解决方案,以缓解 CVE-2015-9284 问题。您可以通过在应用程序中添加以下配置来缓解此漏洞:
OmniAuth.config.request_validation_phase = OmniAuth::AuthenticityTokenProtection.new(key: :_csrf_token)该插件将继续作为上述解决方案的替代方案进行维护。
这对于试图设置 OmniAuth 的 Rails 开发人员来说是令人困惑的,因为不清楚该插件是最佳解决方案还是不是。在 OmniAuth 仓库中的此开放 PR 反映了项目 README 中的这些更改,但我认为更新此 wiki 页面也很重要。
我不想在不允许进行任何讨论的情况下进行编辑,因此我创建了此问题。如果一切看起来都很顺利,我将在本周的某个时候更新 wiki 页面。
建议的新 wiki 页面如下:
这些说明截至 2025 年 2 月 21 日 以及 OmniAuth 版本 v2.1.4 为准。它们是为了解决 CVE-2015-9284 而编写的,并整合自以下讨论(这里、这里 和 这里)以及考虑了 OmniAuth v2.0.0 中引入的更改。
问题
此漏洞通过禁止在 OmniAuth 的 request_phase 中发出 GET 请求以及在请求中包含 CSRF 令牌来进行缓解。OmniAuth 默认情况下实现了第一个缓解条件。虽然 OmniAuth 提供了大部分用于缓解漏洞所需的功能,但仍需要采取特殊措施,以确保 CSRF 令牌被包含并正确处理。这取决于您应用程序的实现。
使用 GET 请求
解决此漏洞的关键部分是拒绝对
/auth/:provider端点发出的 GET 请求。
内容来源: omniauth/omniauth