所以,我有一个表单,为了让它更安全一些,并有可能帮助防止csrf攻击,我想在一个隐藏字段中添加一个随机令牌值,该值也存储在我的会话数据中的服务器端。
我应该什么时候发行新的代币?每个表单?每页加载哪里有表单?每节课?一旦表单提交成功,我就可以使其无效,但我想知道何时生成表单。
如果用户打开一个单独的窗口,但提交了第一个表单(现在被覆盖的值),我会询问是否有可能出现重复的令牌值覆盖现有的(有效的)令牌?
最佳答案
防止并发问题的最简单方法是每次登录只生成一次。攻击者“猜测”您的csrf的几率与他们窃取您的phpsessid的几率差不多(或更低)。您还可以在用户的访问级别更改时重新生成它,例如在他们更改密码或其他内容之后。
如果你想真正彻底,你可以生成和存储一个令牌数组,在网站上每个表单一个。但如果他们能盗取一个csrf令牌,他们可能只是盗取了一个会话id并造成了一些真正的破坏。
关于php - 为了保护表格,我什么时候发行 token ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2968062/