gpt4 book ai didi

ruby-on-rails - 无法验证 CSRF token 真实性 Rails 4.1

转载 作者:数据小太阳 更新时间:2023-10-29 06:43:50 29 4
gpt4 key购买 nike

我正在开发一个简单的网站,让管理员提出问题并让用户解决问题。我在管理部分使用 ActiveAdmin,在用户解决部分使用简单的 AJAX 调用。起初尝试通过 ActiveAdmin::Devise 登录是成功的,但无法退出。我删除了所有 cookie,从那时起我无法在没有 CSRF token 真实性异常的情况下进行 POST 操作。我的 application.html.erb 头部有正确的 meta_tags,声明为 jquery_ujs(其他线程说这是一个常见问题),并且在两个 POST 操作中都存在真实性 token 。我什至尝试通过 skip_before_filter :verify_authenticity_token 避免验证,但 ActiveAdmin 登录和 POST 示例继续失败。日志在下面,您可以看到 token 存在。我还展示了 Gemfile,以防其中任何一个破坏了 CSRF。

  • Rails 版本 [4.1.0]
  • ruby 版本 [2.1]
  • Phusion 乘客版 [4.0.41]

提前致谢。

application.html.erb

<head>
<title>Introducción Matematicas</title>
<%= stylesheet_link_tag "application", media: "all"%>
<%= javascript_include_tag "application", "data-turbolinks-track" => true %>
<link href="http://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700|Roboto+Slab:300,400" rel="stylesheet" type="text/css">
<%= csrf_meta_tags %>
</head>

application.js

//= require jquery
//= require jquery_ujs
//= require_tree ../../../vendor/assets/javascripts/.
//= require_tree .

应用程序 Controller

class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :null_session
#skip_before_filter :verify_authenticity_token
before_filter :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) do |u|
u.permit :name,:college, :email, :password, :password_confirmation
end
end
end

管理员登录日志

INFO -- : Processing by ActiveAdmin::Devise::SessionsController#create as HTML
INFO -- : Parameters: {"utf8"=>"✓", "authenticity_token"=>"aRZK3470X6+FJPANEuHAiwVW4NZwMzCkXtoZ1qlhQ0o=", "admin_user"=>{"email"=>"omar@gmail.com", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Login"}
WARN -- : Can't verify CSRF token authenticity
INFO -- : Completed 401 Unauthorized in 110ms
INFO -- : Processing by ActiveAdmin::Devise::SessionsController#new as HTML
INFO -- : Parameters: {"utf8"=>"✓", "authenticity_token"=>"aRZK3470X6+FJPANEuHAiwVW4NZwMzCkXtoZ1qlhQ0o=", "admin_user"=>{"email"=>"omar@gmail.com", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Login"}
WARN -- : Can't verify CSRF token authenticity
INFO -- : Rendered vendor/cache/ruby/2.1.0/bundler/gems/active_admin-a460d8d2ab37/app/views/active_admin/devise/shared/_links.erb (2.0ms)
INFO -- : Rendered vendor/cache/ruby/2.1.0/bundler/gems/active_admin-a460d8d2ab37/app/views/active_admin/devise/sessions/new.html.erb within layouts/active_admin_logged_out (73.0ms)
INFO -- : Completed 200 OK in 302ms (Views: 80.2ms | ActiveRecord: 0.0ms)

通过 AJAX 日志的简单 POST

INFO -- : Processing by QuestionsController#check_question as JS
INFO -- : Parameters: {"utf8"=>"✓", "que_id"=>"44", "authenticity_token"=>"CjaAx+B36JPc1PUIhta0vIuOTKX4UhrFWlmYHAd+KWY=", "question"=>{"id"=>"169"}, "commit"=>"Verificar Respuesta", "id"=>"6"}
WARN -- : Can't verify CSRF token authenticity
INFO -- : Rendered answers/_answer.html.erb (1.2ms)
INFO -- : Rendered questions/check_question.js.erb (17.0ms)
INFO -- : Completed 200 OK in 94ms

gem 文件

source 'https://rubygems.org'
gem 'rails', '4.1.0'
#gem 'ckeditor'
gem 'mysql2', "0.3.15"
gem 'devise'
gem 'activeadmin', github: 'gregbell/active_admin'
gem 'sass-rails', '~> 4.0.0'
gem 'uglifier', '>= 1.3.0'
gem 'execjs'
gem 'therubyracer'
gem 'coffee-rails', '~> 4.0.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 1.2'
group :doc do
gem 'sdoc', require: false
end
gem 'minitest'

最佳答案

skip_before_filter :verify_authenticity_token

哇哦,不要这样做。这完全是黑客攻击,如果您不小心将其留在代码中,就会造成严重的安全问题。

那么,您为什么要删除 cookie?如果我没看错你的问题,那是因为你的注销功能坏了?您如何找出注销无法正常工作的原因并修复它。去创造另一个问题(绕过 CSRF 身份验证)而不是解决原始问题可能不是一个好主意。

同时重新启动本地开发服务器并在浏览器中打开一个新选项卡。看看这是否至少让 CSRF 问题消失,然后回到注销问题。

关于ruby-on-rails - 无法验证 CSRF token 真实性 Rails 4.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23377648/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com