3

所以,我有一个表单,让它更安全一点,并可能有助于防止 CSRF 攻击我想在隐藏字段中添加一个随机令牌值,该值也存储在我的会话数据中的服务器端。

我应该什么时候发行新的令牌?履行?每页加载哪里有什么表格?每个会话?成功提交表单后,我可以立即使其无效,但我想知道何时生成一个。

如果用户打开一个单独的窗口但提交第一个表单(现在被覆盖的值),我问如果我按表单或按页面发布它,我是否不会冒重复令牌值覆盖现有(有效)令牌的风险?

4

2 回答 2

1

防止并发问题的最简单方法是每次登录只生成一次。攻击者“猜测”您的 CSRF 的机会与他们窃取您的 PHPSESSID 的机会大致相同(或更低)。您也可以在用户的​​访问级别更改时重新生成它,例如在他们更改密码或其他内容之后。

如果您想真正彻底,您可以生成并存储一系列令牌,网站上的每个表单一个。但如果他们可以窃取 CSRF 令牌,他们可能只是窃取了一个会话 ID 并造成了一些真正的损害。

于 2010-06-03T17:10:45.593 回答
0
  • 如果每个会话使用一个令牌,那么您需要一种技术来检查重复提交的表单(当用户刷新页面或单击返回按钮时)。
  • 如果每个表单都使用它,那么如果用户打开多个页面,那么只有最后一个表单可以工作。
  • 我更喜欢在每个会话中使用生成的令牌数组,并且在提交令牌时应该将其删除。我读到如果您拥有高流量网站,这种方法可能会引起关注。

我不确定你之前是否读过这篇文章,但我认为这是关于 CSRF 安全性的绝佳资源:http: //shiflett.org/articles/cross-site-request-forgeries

于 2010-11-07T10:17:26.467 回答