我继承了一些最近受到攻击的代码,其中攻击者发送了重复的远程表单提交。
我使用为每个用户(而不是会话 ID)创建的会话身份验证令牌实现了预防。虽然我意识到这种特定的攻击不是 CSRF,但我从这些帖子中调整了我的解决方案(尽管过时了)。
- https://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29
- http://tyleregeto.com/a-guide-to-nonce
- http://shiflett.org/articles/cross-site-request-forgeries
但是,它仍然觉得这里存在一些漏洞。虽然我知道没有什么是 100% 安全的,但我有一些问题:
- 难道潜在的攻击者不能简单地启动一个有效会话,然后在他们的每个请求中包含会话 ID(通过 cookie)吗?
- 似乎nonce会比session token更好。生成和跟踪nonce的最佳方法是什么?
- 我遇到了一些关于这些解决方案只是单一窗口的观点。有人可以详细说明这一点吗?
- 这些解决方案是否总是需要会话?还是可以在没有会话的情况下创建这些令牌?UPDATE,这个特定页面只是一个单页表单(无需登录)。因此,仅仅为了生成一个令牌而开始一个会话似乎是多余的。
- 是否有一个更简单的解决方案(不是验证码)我可以实施来防止这种不使用会话的特定攻击。
最后,我正在寻找更好的理解,以便我可以实施更强大的解决方案。