2010-11-06 14 views
6

Raylar, AJAX istekleri için özgünlük belirteçlerini göz ardı ediyor gibi görünüyor. Örneğin, AJAX çağrımı, geçersiz bir belirteçle test etmek için bilerek değiştirdim ve istekleri normal olarak geçiyor gibi görünüyor.Raylar 3 AJAX istek kimlik doğrulaması belirteci yok sayılır

Uygulama, oturum tanımlama bilgisi deposunu kullanmak için varsayılan yapılandırmaya sahiptir ve protect_from_forgery çağrısı ApplicationController'da bulunur.

Başka hangi fikirler eksik olabilirim?

cevap

7

DÜZENLEME >> Ben de bir blog yayınında bu cevabı yayınladı: http://zadasnotes.blogspot.com/2010/11/rails-3-forgery-csrf-protection-for.html

DÜZENLEME 2 >> Bu Rails 3.0.4 yılında değiştirildi. Burada yazı takip Bkz: http://zadasnotes.blogspot.com/2011/02/rails-forgery-csrf-protection-for-ajax.html

Bir süredir araştırma sonra öğrenmek için raylar kod belgeleri içine biraz kazmak karar verdi.

burada Başlangıç: http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection.html#method-i-form_authenticity_token

protect_from_forgery aşağıda gösterilmiştir verify_authenticity_token üzerinde before_filter bir ekler:

# File actionpack/lib/action_controller/metal/request_forgery_protection.rb, line 95 
95:  def verify_authenticity_token 
96:   verified_request? || raise(ActionController::InvalidAuthenticityToken) 
97:  end 

Ve verified_request ? burada gösterilir:

# File actionpack/lib/action_controller/metal/request_forgery_protection.rb, line 
104:  def verified_request? 
105:   !protect_against_forgery? || request.forgery_whitelisted? || 
106:   form_authenticity_token == params[request_forgery_protection_token] 
107:  end 

Nihayet request.forgery_whitelisted?:

# File actionpack/lib/action_dispatch/http/request.rb, line 126 
126:  def forgery_whitelisted? 
127:  get? || xhr? || content_mime_type.nil? || !content_mime_type.verify_request? 
128:  end 

Bildirimi xhr?. xmlHttpRequest beyaz listeye alındı ​​ve protect_from_forgery listesinde yok. Yani bu tasarım gereği gibi görünüyor.

xmlHttpRequests hakkında daha fazla araştırma yaptıktan sonra, bunları etki alanları üzerinde çalıştırmayla ilgili kısıtlamalar bulunduğundan, xs üzerindeki csrf denetimini gereksiz kılar.

+1

Bu, Rails 3.0.4 olarak değişti - artık AJAX isteklerinin de belirteci sağlaması gerekiyor. Bkz. [Bu taahhüt] (https://github.com/rails/rails/commit/ae19e4141f27f80013c11e8b1da68e5c52c779ea) – jamuraa

+0

@jamuraa İşaretlediğiniz için teşekkürler. Bu konuda bir takip blog yazısı vardı: http://zadasnotes.blogspot.com/2011/02/rails-forgery-csrf-protection-for-ajax.html – zzawaideh

+3

zadasnotes.blogspot.com için yukarıdaki bağlantıların hiçbiri iş.... –