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