it-swarm.com.de

Authentifizierung des CSRF-Tokens kann nicht überprüft werden. Rails 4.1

Ich entwickle eine einfache Website, auf der Administratoren Fragen erstellen und Benutzer lösen können. Ich verwende ActiveAdmin für den Admin-Teil und einfache AJAX-Aufrufe für den Benutzerlösungsteil. Der Versuch, sich über ActiveAdmin :: Devise anzumelden, war anfangs erfolgreich, aber der Login war nicht möglich. Ich habe alle Cookies gelöscht und bin seitdem nicht in der Lage, POST - Aktionen ohne eine Ausnahme für das CSRF-Token auszuführen. Ich habe die korrekten meta_tags im Kopf meiner application.html.erb, erklärte jquery_ujs (andere Threads behaupten, es sei ein häufiges Problem) und in beiden POST - Aktionen ist das Authentizitätstoken vorhanden. Ich habe sogar versucht, die Überprüfung über skip_before_filter zu vermeiden: verify_authenticity_token , aber das ActiveAdmin-Login und POST Example scheitern weiterhin. Die Protokolle sind unten. Sie können sehen, dass die Token existieren. Ich zeige das Gemfile auch für den Fall, dass einer von ihnen mit der CSRF etwas bricht.

  • Schienenversion [4.1.0] 
  • Ruby-Version [2.1]
  • Phusionspassagierversion [4.0.41]

Danke im Voraus.

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 .

Anwendungscontroller

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

Admin Login Log

INFO -- : Processing by ActiveAdmin::Devise::SessionsController#create as HTML
INFO -- :   Parameters: {"utf8"=>"✓", "authenticity_token"=>"aRZK3470X6+FJPANEuHAiwVW4NZwMzCkXtoZ1qlhQ0o=", "admin_user"=>{"email"=>"[email protected]", "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"=>"[email protected]", "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)

Einfaches POST über AJAX Log

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

Gemfile

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'
11
torresomar

skip_before_filter :verify_authenticity_token

Whoa, tu das nicht. Das ist ein totaler Hack, und wenn Sie das versehentlich in Ihrem Code belassen, haben Sie gerade ein ernstes Sicherheitsproblem geschaffen.

Warum haben Sie Ihre Cookies gelöscht? Wenn ich Ihre Frage richtig gelesen habe, liegt das daran, dass Ihre Logout-Funktion fehlerhaft war. Wie wäre es, wenn Sie herausfinden, warum die Abmeldung nicht funktioniert? Wahrscheinlich keine gute Idee, ein anderes Problem zu erstellen (die CSRF-Authentifizierung zu umgehen), anstatt das ursprüngliche Problem zu beheben.

Starten Sie in der Zwischenzeit den lokalen Entwicklungsserver neu und starten Sie eine neue Registerkarte in Ihrem Browser. Sehen Sie, ob das CSRF-Zeug zumindest dazu führt, dass es verschwunden ist, und dann zum Abmeldeproblem zurückkehren.

10
jefflunt

Normalerweise haben Sie dieses Problem, wenn Sie von AJAX aus anrufen. Sie können den Token einfach zusammen mit der Post senden

headers : {
      'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') // X-CSRF-TOKEN is used for Ruby on Rails Tokens
}

in Ihrem Ajax Post Call, und stellen Sie sicher, Sie haben

<%= csrf_meta_tags %>

in Ihrem HTML.

Verwenden Sie niemals diese

skip_before_filter :verify_authenticity_token
5
Nate Cheng

Fügen Sie einfach das folgende gem https://github.com/jsanders/angular_Rails_csrf hinzu es wird den Rest übernehmen. 

0
Muaaz Rafi