今天我在我的网络应用程序中添加了 crsf 保护。
- 当打印 html 时,我生成随机 token 并将其放入隐藏字段和用户 session 中。
- 提交表单时,我读取隐藏的表单字段并将其与用户 session 中的 token 进行比较。
- 如果标记匹配,表单提交可能会继续。如果失败,则会显示错误。
为了实现这一点,我使用了在网络上找到的实现。提交表单后,此实现不会从 session 中删除 token 。我决定在提交表单后从 session 中删除 token ,因为不再需要它。
我现在遇到的事情是,当我提交表单,然后按浏览器的后退按钮并再次提交表单时,会出现错误(因为 token 已从用户 session 中删除,但浏览器仍然保留旧表单)在浏览器缓存中并使用旧 token 显示它)。
为了防止这种情况发生,我考虑在 15 分钟后从用户 session 中删除 token 。这样他应该能够返回并重新提交表格。我想知道这是否是解决该问题的有效且安全的解决方案?
最佳答案
除了防止 CSRF 之外, token 还可以帮助您防止双重表单提交。当用户提交相同的表单两次时,我怀疑您的应用程序是否满意。因此,可以在第一次提交时删除 token ,并在第二次提交时显示一条消息:“表单提交无效或已被处理......”
关于java - 让 csrf token 在用户 session 中 15 分钟后过期还是直接删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16566780/