【问题标题】:Filtering parts or all of request URL from rails logs从 Rails 日志中过滤部分或全部请求 URL
【发布时间】:2011-01-04 23:11:13
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    注意:这里的答案是让它在 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
    

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

    【讨论】:

    • 这拯救了我的一天,谢谢。我能够在控制器中简单地定义我想要过滤/保护的功能,效果很好。
    • @nessur 嘿,我认为这个答案有点老了,在我发送补丁修复参数过滤之前。现在,我很确定如果您设置了 config.filter_parameters,它也会从您的日志中过滤掉该参数。有关详细信息,请参阅 github.com/rails/rails/commit/…api.rubyonrails.org/classes/ActionDispatch/Http/…。如果没有,请在 Rails 上提交一个错误,以便我解决它。
    • 谢谢,但我的问题在于我正在维护的 Rails 2.3.12 应用程序。我们有其他 Rails 3.2x 应用程序,这种过滤很好,花花公子。我认为没有人会为 Rails 2.3 发布更多错误修复,对吧? :) 干杯!
    • 是的,确实如此。那么这就是要走的路:)
    【解决方案2】:

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

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

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

    【讨论】:

    • 这行得通。谢谢!惊讶地发现这在 rails 3.2.11 上不起作用。希望这将使其成为主要的 Rails 宝石。
    猜你喜欢
    • 1970-01-01
    • 2019-07-31
    • 2023-03-27
    • 2013-06-23
    • 1970-01-01
    • 2017-08-26
    • 1970-01-01
    • 2012-03-22
    • 2014-08-05
    相关资源
    最近更新 更多