Rails 3 を実行していて、ポスト パラメータとして渡される JSON BLOB である機密情報をログから除外しようとしています。たとえば、ユーザーの作成user
では、JSON オブジェクトである文字列値で呼び出される post パラメーターを取る場合があります。JSON オブジェクトのキーの 1 つは であり、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 attempts to dup symbol
ブロックを filter_parameters に渡すのは安全ではないようです。この問題を解決する別の方法があるかどうか疑問に思っています。