3

Rails 提供 filter_parameter_logging 来过滤 Rails 日志中的敏感参数。

如果您有 JSONP API,则 URL 中可能存在一些敏感信息。有没有办法从日志中过滤请求 URL?

4

2 回答 2

7

注意:这里的答案是让它在 Rails 2.x ~> 3.0 上工作的方法。从 Rails 3.1 开始,如果设置config.filter_parameters,Rails 也会过滤掉查询字符串中的敏感参数。有关更多详细信息,请参阅此提交


我认为在这种情况下,您需要complete_request_uriActionController::Base中覆盖,因为ActionController::Benchmarking调用该方法并打印如下所示的行:

Completed in 171ms (View: 35, DB: 7) | 200 OK [http://localhost:3000/]

我认为您可以将其放入初始化程序中以覆盖此方法

class ActionController::Base
  private

  def complete_request_uri
    "#{request.protocol}#{request.host}#{request.request_uri.gsub(/secret=([a-z0-9]+)/i, "secret=[FILTERTED]")}"
  end
end

请注意,您需要对正则表达式进行一些操作,以使其替换您想要的部分。

于 2010-01-14T15:13:56.947 回答
2

遗憾的是,这在 Rails 3 中不再有效。路径(包括查询参数)来自ActionDispatch::Request,它继承自Rack::Request。这是您可以放入初始化程序的相关猴子补丁:

class ActionDispatch::Request
  def fullpath
    @fullpath ||= super.gsub(/secret=[^&]+/, 'secret=[FILTERED]')
  end
end

我切换到[^&]在正则表达式中使用,因为参数中很容易包含不是字母或数字的字符。

于 2011-03-01T00:57:53.440 回答