2013-07-04 10 views
5

Mam aplikację Rails na serwerze Heroku.Wyłączone metody HTTP na Heroku

Aby uzyskać ocenę bezpieczeństwa, aby umożliwić naszą aplikację, powiedziano nam, aby wyłączyć wiele metod HTTP.

"Serwer aplikacji musi być skonfigurowany do wyłączania TRACE i innych metod HTTP, jeśli nie są używane."

Czy to możliwe z Heroku? Jeśli nie, czy istnieje sposób wyłączenia tych metod na poziomie aplikacji? Wszelkie wskazówki będą mile widziane.

Dzięki

+1

** Aktualizacja: ** Heroku ma zdobyć z powrotem do mnie, mówiąc, że nie jest to możliwe na koniec. Więc teraz jest pytanie o odrzucenie na poziomie aplikacji. – Forrest

+0

Czy było to w porządku w przypadku Intuit, czy też dysponowałeś serwerami przenoszenia? –

Odpowiedz

12

Na poziomie aplikacji, można dodać to w pliku application_controller.rb

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 

Albo można spróbować z https://github.com/jtrupiano/rack-rewrite (sprawdzić dowolny przepisanie) z czymś takim (nie testowane):

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

Albo można użyć jesteś właścicielem middleware umieszczając to w ./lib pliku:

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 

i nazywają to w environment.rb

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

config.middleware.use "RejectMethods" 
+0

3 doskonałe sugestie. Dziękuję Ci. – Forrest