2013-07-04 27 views
5

我在Heroku上託管了一個Rails應用程序。Heroku上禁用的HTTP方法

對於允許我們的應用程序的安全審查,我們被告知禁用一些HTTP方法。

「應用程序Web服務器必須配置爲禁用TRACE 和其他HTTP方法(如果不使用的話)。」

Heroku可能嗎?如果沒有,是否有辦法在應用程序級別禁用這些方法?任何提示將不勝感激。

感謝

+1

**更新:**的Heroku已經得到了還給我說這是不可能在那裏結束。所以現在是關於應用程序級拒絕的問題。 – Forrest

+0

Intuit可以嗎?或者您有移動服務器嗎? – 2015-11-23 22:09:42

回答

12

在應用層面上,你可以在你的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 

或者你可以用https://github.com/jtrupiano/rack-rewrite(檢查任意重寫)嘗試像這樣(未測試):

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

或者你也可以通過把這個文件中的./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 

,並調用它在application.rb中

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

config.middleware.use "RejectMethods" 
+0

3個極好的建議。謝謝。 – Forrest