所以,我有一个表单,让它更安全一点,并可能有助于防止 CSRF 攻击我想在隐藏字段中添加一个随机令牌值,该值也存储在我的会话数据中的服务器端。
我应该什么时候发行新的令牌?履行?每页加载哪里有什么表格?每个会话?成功提交表单后,我可以立即使其无效,但我想知道何时生成一个。
如果用户打开一个单独的窗口但提交第一个表单(现在被覆盖的值),我问如果我按表单或按页面发布它,我是否不会冒重复令牌值覆盖现有(有效)令牌的风险?
防止并发问题的最简单方法是每次登录只生成一次。攻击者“猜测”您的 CSRF 的机会与他们窃取您的 PHPSESSID 的机会大致相同(或更低)。您也可以在用户的访问级别更改时重新生成它,例如在他们更改密码或其他内容之后。
如果您想真正彻底,您可以生成并存储一系列令牌,网站上的每个表单一个。但如果他们可以窃取 CSRF 令牌,他们可能只是窃取了一个会话 ID 并造成了一些真正的损害。
我不确定你之前是否读过这篇文章,但我认为这是关于 CSRF 安全性的绝佳资源:http: //shiflett.org/articles/cross-site-request-forgeries