【问题标题】:Custom filtering of parameters in rails 3 using config.filter_parameters使用 config.filter_parameters 在 rails 3 中自定义过滤参数
【发布时间】:2011-11-28 18:30:13
【问题描述】:

我正在从 Rails 2.3.11 升级到 3.0.10,但无法转换 ApplicationControllerfilter_parameter_logging 中的内容。我想过滤某些参数,如果它们出现在 :referrer 标记之类的值中,也要过滤它们。

我可以在application.rb中过滤掉常规参数

config.filter_parameters += [:password, :oauth, ...]

但我遇到的问题是我们也在 filter_parameter_logging 中传递的块。它还会过滤掉任何看起来像 url 的值中的参数,所以像 http://example.com?password=foobar&oauth=123foo&page=2 这样的东西会被记录为 http://example.com?password=[FILTERED]&oauth=[FILTERED]&page=2。我需要一种方法让 rails 既可以过滤指定的参数,又可以仅从其他值中过滤掉那些参数,例如上面的 url。

这是它在 filter_parameter_logging 中的样子:

FILTER_WORDS = %{password oauth email ...} 
FILTER_WORDS_REGEX = /#{FILTER_WORDS.join("|")}/i

#Captures param in $1 (would also match things like old_password, new_password), and value in $2
FILTER_WORDS_GSUB_REGEX = /((?:#{FILTER_WORDS.join("|")})[^\/?]*?)(?:=|%3D).*?(&|%26|$)/i

filter_parameter_logging(*FILTER_WORDS) do |k,v|
  begin
    # Bail immediately if we can
    next unless v =~ FILTER_WORDS_REGEX && (v.index("=") || v.index("%3D"))

    #Filters out values for params that match
    v.gsub!(FILTER_WORDS_GSUB_REGEX) do
      "#{$1}=[FILTERED]#{$2}"
    end
  rescue Exception => e
    logger.error e
  end
end

有没有办法在application.rb 中使用config.filter_parameters 以这种方式进行rails 过滤?我似乎找不到任何关于如何在 rails 3 中自定义过滤的好文档。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 rails-3-upgrade


    【解决方案1】:

    想通了。您可以将 lambda 语句传递给config.filter_parameters,所以在我将参数添加到过滤器之后,我现在有了这个:

    config.filter_parameters << lambda do |k,v|
      begin
        # Bail immediately if we can
        next unless v =~ FILTER_WORDS_REGEX && (v.index("=") || v.index("%3D"))
    
        #Filters out values for params that match
        v.gsub!(FILTER_WORDS_GSUB_REGEX) do
          "#{$1}=[FILTERED]#{$2}"
        end
      rescue Exception => e
        logger.error e
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-26
      • 1970-01-01
      • 2011-02-10
      • 2021-10-08
      相关资源
      最近更新 更多