在Heroku上禁用HTTP方法

时间:2013-07-04 15:19:25

标签: ruby-on-rails heroku

我有一个Rails应用程序正在Heroku上托管。

为了允许我们的应用程序进行安全审核,我们被告知要禁用许多HTTP方法。

  

“必须将应用程序Web服务器配置为禁用TRACE   和其他HTTP方法,如果没有使用。“

这可以用Heroku吗?如果没有,有没有办法在应用程序级别禁用这些方法?任何提示将不胜感激。

由于

1 个答案:

答案 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"