我在Heroku上託管了一個Rails應用程序。Heroku上禁用的HTTP方法
對於允許我們的應用程序的安全審查,我們被告知禁用一些HTTP方法。
「應用程序Web服務器必須配置爲禁用TRACE 和其他HTTP方法(如果不使用的話)。」
Heroku可能嗎?如果沒有,是否有辦法在應用程序級別禁用這些方法?任何提示將不勝感激。
感謝
我在Heroku上託管了一個Rails應用程序。Heroku上禁用的HTTP方法
對於允許我們的應用程序的安全審查,我們被告知禁用一些HTTP方法。
「應用程序Web服務器必須配置爲禁用TRACE 和其他HTTP方法(如果不使用的話)。」
Heroku可能嗎?如果沒有,是否有辦法在應用程序級別禁用這些方法?任何提示將不勝感激。
感謝
在應用層面上,你可以在你的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"
3個極好的建議。謝謝。 – Forrest
**更新:**的Heroku已經得到了還給我說這是不可能在那裏結束。所以現在是關於應用程序級拒絕的問題。 – Forrest
Intuit可以嗎?或者您有移動服務器嗎? – 2015-11-23 22:09:42