我有一个Rails应用程序正在Heroku上托管。
为了允许我们的应用程序进行安全审核,我们被告知要禁用许多HTTP方法。
“必须将应用程序Web服务器配置为禁用TRACE 和其他HTTP方法,如果没有使用。“
这可以用Heroku吗?如果没有,有没有办法在应用程序级别禁用这些方法?任何提示将不胜感激。
由于
答案 0 :(得分:13)
在应用程序级别,您可以在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"