我想知道为什么Rails会在整个会话期间形成真实性标记,而不是每次提交时唯一生成。
我来自web2py,其中表单是使用名为_formkey
的唯一一次性令牌生成的。 formkey自动防止因双击,后退按钮缓存等导致的重复提交。
在Rails中,你显然必须自己处理双重提交问题(参见https://stackoverflow.com/a/4683161/165673)。在我看来,一次性Authenticity Tokens会解决这个问题,并且更安全吗?
答案 0 :(得分:3)
整个会话的一个令牌更容易实现。考虑一下您有两个打开的表单选项卡的情况。
会话的一个令牌与一次性令牌解决方案一样安全。至少可以防止CSRF攻击。
在Rails中,你显然必须自己处理双重提交问题
有开箱即用的解决方案。阅读disable_with
选项。当然,所有修改数据的请求都应该通过HTTP POST发送,而不是GET。