从rails日志中过滤部分或全部请求URL

时间:2010-01-14 05:40:59

标签: ruby-on-rails json filter ruby-on-rails-2

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

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

2 个答案:

答案 0 :(得分:6)

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


我认为在这种情况下,您需要覆盖ActionController::Base中的complete_request_uri,因为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

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

答案 1 :(得分:2)

遗憾的是,这在Rails 3中不再有效。路径(包括查询参数)来自ActionDispatch::Request,它继承自Rack::Request。这是你可以投入初始化器的相关monkeypatch:

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

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