2013-07-04 41 views
5

Tôi có ứng dụng Rails đang được lưu trữ trên Heroku.Phương thức HTTP bị vô hiệu hóa trên Heroku

Để xem xét bảo mật cho phép ứng dụng của chúng tôi, chúng tôi đã được yêu cầu vô hiệu hóa một số phương pháp HTTP.

"Máy chủ web ứng dụng phải được định cấu hình để vô hiệu hóa TRACE và các phương pháp HTTP khác nếu không được sử dụng".

Điều này có thể thực hiện với Heroku không? Nếu không, có cách nào để vô hiệu hóa các phương thức này ở cấp ứng dụng không? Bất kỳ lời khuyên sẽ được đánh giá cao.

Cảm ơn

+1

** Cập nhật: ** Heroku đã nhận được lại cho tôi nói rằng nó không thể ở đó kết thúc. Vì vậy, bây giờ nó là một câu hỏi về từ chối cấp ứng dụng. – Forrest

+0

Điều này có ổn với Intuit hoặc bạn có di chuyển máy chủ không? –

Trả lời

12

Ở cấp độ ứng dụng, bạn có thể thêm này trong tập tin application_controller.rb bạn

before_filter :reject_methods 

    def reject_methods 
    if ['TRACE','PATCH'].include?(request.method) 
     #raise ActionController::RoutingError.new('Not Found') 
     raise ActionController::MethodNotAllowed.new('Method not allowed') #405 
     # or whatever you want to do (redirect, error message, ...) 
    end 
    end 

Hoặc bạn có thể thử với https://github.com/jtrupiano/rack-rewrite (kiểm tra viết lại tùy ý) với một cái gì đó như thế này (không kiểm tra):

rewrite %r{(.*)}, lambda { |match, rack_env| 
    rack_env["REQUEST_METHOD"] == "TRACE" ? "405.html" : match[1] 
} 

Hoặc bạn có thể sử dụng bạn middleware riêng bằng cách đặt này trong một file ./lib:

module Rack 

class RejectMethods 
    def initialize(app) 
    @app = app 
    end 

    def call(env) 
    status, headers, body = @app.call(env) 

    if env["REQUEST_METHOD"] == "TRACE" || env["REQUEST_METHOD"] == "PATCH" 
     body.close if body.respond_to? :close 
     [status, headers, []] 
    else 
     [status, headers, body] 
    end 
    end 
end 

end 

và gọi nó trong application.rb

config.autoload_paths += %W(#{config.root}/lib) 

config.middleware.use "RejectMethods" 
+0

3 đề xuất tuyệt vời. Cảm ơn bạn. – Forrest

Các vấn đề liên quan