2010-09-10 42 views
6

Tôi có hai ứng dụng cần nói chuyện với nhau qua HTTP. Một là một ứng dụng PHP và ứng dụng kia là ứng dụng chính của tôi, ứng dụng Rails. Tôi cần ứng dụng PHP để nói chuyện với ứng dụng Rails bằng cách POST dữ liệu vào nó, nhưng khi tôi làm vậy, tôi nhận được lỗi Token Authenticity Token. Có cách nào để khắc phục điều này? Hoặc làm cách nào để tôi tạo mã thông báo của riêng mình để chuyển qua POST để ứng dụng Rails của tôi xác thực?Rails 3 protect_from_forgery problems

Trả lời

15

Từ documentation for ActionController::RequestForgeryProtection::ClassMethods

Bạn có thể bỏ qua yêu cầu xác thực token hoặc bằng cách xác định và: trừ hoặc bằng cách buộc trước khi bộ lọc để được bỏ qua .... Ví dụ từ tài liệu ...

class FooController < ApplicationController 
    protect_from_forgery :except => :index 

    # you can disable csrf protection on controller-by-controller basis: 
    skip_before_filter :verify_authenticity_token 
end 
+1

nó sẽ không được tốt hơn để lấy mã thông báo xác thực bằng một yêu cầu nhận riêng biệt và sau đó sử dụng nó để gửi biểu mẫu bằng cách sử dụng PHP? Việc vô hiệu hóa mã thông báo không phải là mối quan ngại về bảo mật? – Alex

+0

Tôi đồng ý, bạn không nên tắt tính năng bảo vệ cho Chỉ mục và POST. Bất kỳ ai cố gắng thực hiện điều này nên theo gợi ý của Alex hoặc ít nhất sử dụng một hành động khác và đặt một số loại bảo mật khác như chấp nhận các yêu cầu đến từ một IP đã biết, sử dụng request.remote_ip để loại bỏ các IP không mong muốn. – martincho