ruby-on-rails - Rails form_authenticity_token 与参数不匹配[ :authenticity_token]

标签 ruby-on-rails ruby-on-rails-3 csrf csrf-protection

什么情况下 form_authenticity_token 与 params[:authenticity_token] 不匹配?

我看到未经验证的请求进入我的应用程序,所以我覆盖了 form_tag 以打印出一些调试信息。

form_auth_token:    #{form_authenticity_token.inspect}
session_csrf_token: #{session['_csrf_token'].inspect}
params:             #{params.inspect}

我得到的输出显示 session 具有与 form_auth_token 匹配的正确 token ,但提交的参数 authenticity_token 不匹配:

form_auth_token:    "gckttsVeq2XvTBwQX3BaInWCivIhvR/mYBWjs119eb8="
session_csrf_token: "gckttsVeq2XvTBwQX3BaInWCivIhvR/mYBWjs119eb8="
params:             {"utf8"=>"✓", "authenticity_token"=>"+5IINl7vEh1jJJwP+RiXXws+4kEwM3fpJsCOn+gZ0AA=" ...

我认为根据定义,params[:authenticity_token] 与 form_authenticity_token 相同。

  1. 我是否以错误的方式调试它?
  2. 可能是什么原因造成的?

最佳答案

一些简单的建议:如果您正在使用 rails jquery 帮助程序,rails 会自动在 POST 请求中添加 HTML 文档头部的 csrf-token 元标记值。我会检查 <head> 中的值是什么标记您的 HTML 文档以查看它是否匹配。

关于ruby-on-rails - Rails form_authenticity_token 与参数不匹配[ :authenticity_token],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17073363/

相关文章:

PHP 安全性使用 POST 而不是 GET 来防止 XSRF?

html - 随机 CSRF token 真实性错误

ruby-on-rails - Rails AntiPatterns 书 - 对组合的质疑

mysql - Gem mysql 连接错误

ruby-on-rails - 什么应该从 Ruby on Rails 的公共(public)源代码控制中删除?

ruby-on-rails - Devise 2.2.3 始终在登录前显示已登录通知

ruby-on-rails - 如何从 Rails 中的 URL 获取查询字符串

ruby-on-rails - 根据模型状态更改 URL 的逻辑应该位于 Controller 中还是模型中?

ruby-on-rails - 从 schema.rb 生成迁移文件

javascript - 使用 JS/Ajax API 将通知标记为已读