繁体   English   中英

生成的CSRF令牌太多(PHP),我该如何处理它们?

[英]Too many CSRF tokens generated (PHP), how do I deal with them?

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM