下面是一个错误,由我的Rails应用程序中的一个表单引起:
Processing UsersController#update (for **ip** at 2010-07-29 10:52:27) [PUT]
Parameters: {"commit"=>"Update", "action"=>"update", "_method"=>"put", "authenticity_token"=>"ysiDvO5s7qhJQrnlSR2+f8jF1gxdB7T9I2ydxpRlSSk=", **more parameters**}
ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):对于每个非get请求都会发生这种情况,如您所见,authenticity_token就在那里。
发布于 2011-06-26 08:47:06
通过将评级从2.3.8降至2.3.5解决了问题。(还有臭名昭著的“你被重新定向了”。问题)
发布于 2010-08-29 18:44:33
我也有同样的问题,但页面缓存的页面。页面使用陈旧的身份验证令牌进行缓冲,并使用post/put/delete方法进行所有操作,其中识别为伪造尝试。错误(422无法处理的实体)返回给用户。
Rails 3的解决方案:
添加:
skip_before_filter :verify_authenticity_token 或者正如"sagivo“在Rails 4中指出的那样:
skip_before_action :verify_authenticity_token在进行缓存的页面上。
正如@toobulkeh评论的那样,这不是:index,:show操作上的漏洞,但要注意在:put,:post操作上使用它。
例如:
caches_page :index, :show
skip_before_filter :verify_authenticity_token, :only => [:index, :show]参考:http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection/ClassMethods.html
由barlop- Rails4.2添加的支持skip_before_action https://guides.rubyonrails.org/4_2_release_notes.html的已弃用skip_before_filter添加的注释“*_filter系列方法已从文档中删除。为了支持*_action系列方法,不鼓励使用它们。”
对于Rails 6 (正如"collimarco“所指出的),您可以使用skip_forgery_protection,并且将其用于不使用会话数据的REST API是安全的。
发布于 2013-11-07 02:13:14
对我来说,在Rails4下这个问题的原因是一个缺失,
<%= csrf_meta_tags %>我的主应用程序布局中的行。当我重写我的布局时,我不小心把它删除了。
如果它不在主布局中,那么在任何需要CSRF令牌的页面中都需要它。
https://stackoverflow.com/questions/3364492
复制相似问题