编程语言
首页 > 编程语言> > 生成的CSRF令牌(PHP)太多,如何处理它们?

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

作者:互联网

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

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

最终,我得到了比我想要的更多的未使用令牌.这在某些服务器中是个问题.

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

解决方法:

没有(实用)的方式来知道您的用户是否仍会使用令牌.因此,您将必须在x小时后自动删除(并使它们无效),例如使用cronjob.

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

请记住,一次性令牌还会使选项卡式浏览或使用浏览器历史记录变得非常痛苦.

标签:unused-variables,csrf-protection,csrf,token,php
来源: https://codeday.me/bug/20191031/1972678.html