3

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

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

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

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

4

1 回答 1

4

没有(实用的)方法可以知道您的用户是否仍将使用令牌。因此,您将不得不在 x 小时后自动删除(从而使它们无效),例如通过使用 cronjob。

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

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

于 2013-04-05T09:17:33.253 回答