php - 生成的 CSRF token 太多(PHP),我该如何处理?

标签 php token csrf csrf-protection unused-variables

我遇到了一个问题。按照 OWASP 备忘单,我在 PHP 中实现了一个一次性使用的 CSRF token 系统(基本上是从 OWASP 复制和粘贴)。每个表单或链接(生成某些操作的链接)都会创建自己的 CSRF token ,一旦使用,就会被删除。应用程序是一个网站,因此可以同时打开多个选项卡。

问题是每次加载页面时,它都会创建一个新的 CSRF token (即使您只是点击重新加载而不发送表单)。例如,在管理面板中,有一个项目列表,每个项目都可以删除一个带有 CSRF token 的链接(所有链接都使用相同的 CSRF token ),但是如果您重新加载页面,则会生成一个新的 csrf。

在一天结束时,我得到的未使用 token 比我想要的要多。这是某些服务器的问题。

TLDR;我为每个请求生成一个 token 。我删除了所有使用过的 token (ajax 请求 token 除外,一个小时后我删除了)。我的问题是未使用的代币,归根结底,它们太多了。

最佳答案

没有(实用的)方法可以知道您的用户是否仍会使用该 token 。因此,您必须在 x 小时后自动删除(并因此使它们失效),例如使用 cronjob。

只是一个建议:你确定你真的需要一次性代币吗? OWASP 自己说这对于安全来说并不是绝对必要的:“一般来说,开发人员只需要为当前 session 生成一次此 token 。[...]) ( https://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29_Prevention_Cheat_Sheet )。

请记住,一次性 token 也会使标签式浏览或使用浏览器历史记录变得非常痛苦。

关于php - 生成的 CSRF token 太多(PHP),我该如何处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15829977/

相关文章:

asp.net-mvc - 首次登录本地站点时出现防伪造 cookie token 错误,第二次尝试时就可以了

php - 脚本何时真正与 MySql 通信?

security - 身份验证 token 已加密但未签名 - 弱点?

php - X-XSRF-TOKEN 和 X-CSRF-TOKEN 有什么区别?

java - 枚举变量是一种什么样的数据结构?

android - 我正在从我的 API 取回一个 token 并可以在 Logcat 中打印它我需要保存该响应但我没有任何运气。我是 Kotlin 的新手

node.js - 注销并获取 new/csrfToken 后 SailsJS CSRF 不匹配

php - 解析 Paypal REST API 响应

javascript - 人们可以在我的网站域上修改/创建 cookie 吗?

javascript - WordPress Ajax 调用在 Firefox 中不起作用