我有一个托管在 Heroku 上的 Ruby on Rails 应用程序。
为了允许我们的应用程序进行安全审查,我们被告知要禁用一些 HTTP 方法。
“如果不使用,应用程序 Web 服务器必须配置为禁用 TRACE 和其他 HTTP 方法。”
Heroku 有可能吗?如果没有,有没有办法在应用程序级别禁用这些方法?
我有一个托管在 Heroku 上的 Ruby on Rails 应用程序。
为了允许我们的应用程序进行安全审查,我们被告知要禁用一些 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"