我正在运行 Rails 3 并尝试从我们的日志中过滤敏感信息,这些信息是作为 post 参数传递的 JSON blob。例如,用户创建可能需要一个user
使用 JSON 对象的字符串值调用的 post 参数。JSON 对象中的键之一是password
,我们希望将其从日志中过滤掉。我发现这样做的最好方法是向我们的 filter_params 添加一个块,如下所示:
keys_to_filter = ['password', 'password_confirmation']
config.filter_parameters << lambda do |k,v|
if v.is_a? String
keys_to_filter.each do |key|
# Match "key":"<filter_out>", or "key":"<filter_out>"}, allowing for whitespace
v.sub!(/("\s*#{key}\s*")\s*:\s*"[^,\}]*"\s*([,\}])/, "\\1:\"[FILTERED]\"\\2")
end
end
end
这会向 filter_params 添加一个块,这会导致另一个问题中描述的错误:Rails: ParameterFilter::compiled_filter try to dup symbol
似乎将块传递给 filter_parameters 是不安全的,所以我想知道是否有另一种方法来解决这个问题。