为什么Rails真实性令牌会话持久且不是每个提交的唯一?

时间:2013-09-06 16:30:52

标签: ruby-on-rails forms web2py authenticity-token

我想知道为什么Rails会在整个会话期间形成真实性标记,而不是每次提交时唯一生成。

我来自web2py,其中表单是使用名为_formkey的唯一一次性令牌生成的。 formkey自动防止因双击,后退按钮缓存等导致的重复提交。

在Rails中,你显然必须自己处理双重提交问题(参见https://stackoverflow.com/a/4683161/165673)。在我看来,一次性Authenticity Tokens会解决这个问题,并且更安全吗?

1 个答案:

答案 0 :(得分:3)

整个会话的一个令牌更容易实现。考虑一下您有两个打开的表单选项卡的情况。

会话的一个令牌与一次性令牌解决方案一样安全。至少可以防止CSRF攻击。

  

在Rails中,你显然必须自己处理双重提交问题

有开箱即用的解决方案。阅读disable_with选项。当然,所有修改数据的请求都应该通过HTTP POST发送,而不是GET。