使用 config.filter_parameters 对 Rails 3 中的参数进行自定义过滤

2023-12-09

我正在努力从 Rails 2.3.11 升级到 3.0.10,并且在转换中的内容时遇到问题ApplicationController's filter_parameter_logging。我想过滤某些参数,如果它们出现在类似 a 的值中,也过滤它们:referrer tag.

我可以在我的中过滤掉常规参数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

有没有一种方法可以使用这种方式制作轨道过滤器config.filter_parameters in application.rb?我似乎找不到任何关于如何在 Rails 3 中自定义过滤的好文档。


弄清楚了。您可以将 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 config.filter_parameters 对 Rails 3 中的参数进行自定义过滤 的相关文章

随机推荐