gpt4 book ai didi

scala - 启用 csrf.sign.tokens 时,Play 2.2.1 Scala 中的 CSRF 总是失败

转载 作者:行者123 更新时间:2023-12-02 03:41:17 26 4
gpt4 key购买 nike

刚刚升级到 2.2.1,我对 CSRF 处理发生了什么感到有点困惑。使用默认配置,我总是会收到“缺少 CSRF token ”错误,即使 session 数据中显然有一个 csrfToken。

经过更多的探索,我发现我可以通过在设置中将 csrf.sign.tokens 设置为 false(默认为 true)来防止这种情况发生。出于某种原因,这些行:

token.flatMap(Crypto.extractSignedToken)
.map(token => Token(Crypto.signToken(token)))

CSRF.getToken给我一个 None token 。有谁知道启用 token 签名时什么会使 CSRF 失败。我没有(有意地)更改任何与 CSRF 相关的默认配置。我怀疑 token 的格式不正确并且 Crypto.extractSignedToken失败了,但我不明白为什么会这样。

我的应用程序的 CSRF 保护是使用全局 WithFilters(CSRFFilter()) 方法完成的。

最佳答案

这似乎是因为 Play 2.1.x 中的 CSRF token 与 2.2 或 2.3 中的不兼容。如果您有来自 2.1.x 应用程序的 cookie,然后将应用程序升级到 2.2,当客户端使用旧 cookie 值发出请求时,您会看到此问题。我找到的最简单的解决方案是重命名 application.conf 中的 token ,如下所示:

csrf.token.name=csrfToken1

有点讨厌的 hack,但它有效。我考虑过将 token 移动到它自己的 cookie(使用 csrf.cookie.name 属性,但这仍然导致“缺少 CSRF token ”错误

关于scala - 启用 csrf.sign.tokens 时,Play 2.2.1 Scala 中的 CSRF 总是失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19878426/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com