Railsにはログフィルタリングが組み込まれているため、パスワードとクレジットカードを記録しません。そのためにはうまく機能しますが、カスタムログ(電子メールなど)をトリガーし、独自のパラメーターまたはその他のデータを一緒に送信する場合、パラメーターは明らかに自動フィルター処理されません。私はこれをRailsソースで探してみましたが、これまで運がありませんでした。
Railsを次のようにパラメータをフィルタリングするように構成し、データをRailsログから除外するために適切に動作します:
config.filter_parameters += [:password, :password_confirmation, :credit_card]
電子メール、APIコール、またはカスタム(非Rails)ログにダンプする前に、paramsハッシュから機密データをどのようにフィルタリングしますか?
いつでもexcept
メソッドを使用できます:
params.except(:password, :password_confirmation, :credit_card)
それはリストからそれらを除外します。それらを「フィルタリング」するには、 この方法を試してください 。
ログインのフィルタリングに関する補足事項Rails 4+:config.filter_parameters
はapplication.rbから独自のイニシャライザーに移動されました。
config/initializers/filter_parameter_logging.rb
Rails.application.config.filter_parameters += [:password]
tadmanは正しく答えましたが、ここにいくつかの追加情報があります。
Application.rbで
config.filter_parameters += [:password, :password_confirmation, :credit_card]
カスタムロギングを行う場所:
f = ActionDispatch::Http::ParameterFilter.new(Rails.application.config.filter_parameters)
f.filter :order => {:credit_card => "4111111111111111"}
=> {:order=>{:credit_card=>"[FILTERED]"}}
Railsコントローラメソッド内にいる場合は、単にrequest.filtered_parameters
?
既に提供されているものを使用することは常に良い選択です。乾杯!
@tadmanの回答を追加するだけです:
except
を使用する場合、パラメータの最上位キーのみが削除されることに注意してください。例:
params = {
search_query: 'foobar',
secret_key1: 'SENSITIVE_KEY_1',
auth_info: {secret_key_2: 'SENSITIVE_KEY2'}
}
params.except(:secret_key1, :secret_key2)
=> {:search_query=>"foobar", :auth_info=>{:secret_key_2=>"SENSITIVE_KEY2"}}
request.filtered_parameters
を使用すると、これらのキーがconfig/application.rbにある場合、両方のキーがフィルタリングされます
config.filter_parameters += [:password]