我遇到了一个问题。按照 OWASP 备忘单,我在 PHP 中实现了一个一次性 CSRF 令牌系统(基本上是从 OWASP 复制和粘贴)。每个表单或链接(生成某些操作的链接)都会创建自己的 CSRF 令牌,一旦使用,它将被删除。应用程序是一个网站,因此可以同时打开多个选项卡。
问题是每次加载页面时,它都会创建一个新的 CSRF 令牌(即使您只是点击重新加载而不发送表单)。例如,在管理面板中,有一个项目列表,每个项目都可以使用具有 CSRF 令牌的链接删除(所有链接都使用相同的 CSRF 令牌),但如果您重新加载页面,则会生成一个新的 csrf。
在一天结束时,我得到了比我想要的更多的未使用令牌。这是某些服务器中的问题。
TLDR;我为每个请求生成一个令牌。我删除了所有使用的令牌(除了 ajax 请求令牌,一个小时后我删除了)。我的问题是未使用的令牌,归根结底,它们太多了。