让csrf令牌在15分钟后在用户会话中到期或直接删除?

时间:2013-05-15 13:46:00

标签: java security session csrf

今天我在我的webapplication中添加了crsf保护。

  • 当打印html for时,我生成随机令牌并将其放入隐藏字段和用户会话中。
  • 提交表单时,我会读取隐藏的表单字段,并在用户会话中将其与令牌进行比较。
  • 如果代币匹配表单提交可能会继续。如果失败则显示错误。

为了实现这一点,我使用了网络上的实现。提交表单后,此实现不会从会话中删除令牌。我决定在提交表单后从会话中删除令牌,因为不再需要它。

我现在碰到的是当我提交表单然后我按下浏览器的后退按钮并再次提交表单时出现错误(因为令牌已从用户会话中删除,但浏览器仍保留旧表单在浏览器缓存中并使用旧令牌显示它。)

为了防止这种情况发生,我想在15分钟后从用户会话中删除令牌。这样他应该能够返回并重新提交表格。我想知道这是否是一个有效且安全的问题解决方案?

1 个答案:

答案 0 :(得分:2)

除了防止CSRF之外,该令牌还可以帮助您防止双重表单提交。当用户提交两次相同的表单时,我怀疑您的应用程序是否满意。因此,可以在第一次提交时删除令牌,并在第二次提交时显示一条消息,说明:“表单提交无效或已经处理过......”