EDIT >> Ho postato questa risposta in un post sul blog, così: http://zadasnotes.blogspot.com/2010/11/rails-3-forgery-csrf-protection-for.html
EDIT 2 >> Questo è stato cambiato in Rails 3.0.4. Vedere follow-up post qui: http://zadasnotes.blogspot.com/2011/02/rails-forgery-csrf-protection-for-ajax.html
Dopo la ricerca per un po ', ho deciso di scavare un po' nella documentazione del codice rotaie per scoprirlo.
partire qui: http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection.html#method-i-form_authenticity_token
protect_from_forgery aggiunge un before_filter su verify_authenticity_token che riportiamo di seguito:
# 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
E il verified_request? viene mostrato qui:
# 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
Infine 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
Avviso XHR?. xmlHttpRequest è nella whitelist e non si trova nella lista protect_from_forgery. Quindi sembra che questo sia di design.
Dopo aver cercato ulteriormente su xmlHttpRequests, sembra che ci siano delle restrizioni per eseguirli su domini, il che rende superfluo applicare il controllo csrf su xhr.
Questo è cambiato da Rails 3.0.4 - ora anche le richieste AJAX devono fornire il token. Vedi [questo commit] (https://github.com/rails/rails/commit/ae19e4141f27f80013c11e8b1da68e5c52c779ea) – jamuraa
@jamuraa Grazie per averlo fatto notare. Ho avuto un post sul blog di follow-up riguardo a questo qui: http://zadasnotes.blogspot.com/2011/02/rails-forgery-csrf-protection-for-ajax.html – zzawaideh
nessuno dei collegamenti precedenti per zadasnotes.blogspot.com lavoro.... –