EDIT >> Tôi gửi câu trả lời này trong một bài viết trên blog cũng như: http://zadasnotes.blogspot.com/2010/11/rails-3-forgery-csrf-protection-for.html
EDIT 2 >> Điều này đã được thay đổi trong Rails 3.0.4. Xem theo dõi bài ở đây: http://zadasnotes.blogspot.com/2011/02/rails-forgery-csrf-protection-for-ajax.html
Sau khi nghiên cứu nó trong một thời gian, tôi quyết định đào một chút vào tài liệu ray mã để tìm hiểu.
Bắt đầu từ đây: http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection.html#method-i-form_authenticity_token
protect_from_forgery thêm một before_filter trên verify_authenticity_token được hiển thị dưới đây:
# 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
Và verified_request? được hiển thị ở đây:
# 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
Cuối cùng 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
Thông báo xhr?. xmlHttpRequest nằm trong danh sách trắng và không nằm trong danh sách protect_from_forgery. Vì vậy, nó xuất hiện rằng đây là do thiết kế.
Sau khi nghiên cứu thêm về xmlHttpRequests, có vẻ như có những hạn chế khi chạy chúng trên các tên miền, khiến bạn không cần phải áp dụng kiểm tra csrf trên xhr.
Điều này đã thay đổi kể từ Rails 3.0.4 - bây giờ yêu cầu AJAX cũng cần cung cấp mã thông báo. Xem [cam kết này] (https://github.com/rails/rails/commit/ae19e4141f27f80013c11e8b1da68e5c52c779ea) – jamuraa
@jamuraa Cảm ơn bạn đã chỉ ra. Tôi đã có một bài đăng blog tiếp theo về vấn đề này tại đây: http://zadasnotes.blogspot.com/2011/02/rails-forgery-csrf-protection-for-ajax.html – zzawaideh
không có liên kết nào ở trên cho zadasnotes.blogspot.com công việc.... –