[rails]特定パラメータをフィルタリングしてアプリケーションログに残さないようにする
Ruby2.1.4, Rails4.1.7で確認。
Railsではlogディレクトリ以下にアプリケーションログが残るようになっており、デフォルトだとセキュリティの面からパラメータ名がpasswordのものはフィルタリングされるようになっています。
Parameters: {"user_name"=>"sample","password"=>"[FILTERED]"}
↑のように[FILTERED]で内容を隠してくれます。
この設定は config/initializers/filter_parameter_logging.rb で行われています。
# config/initializers/filter_parameter_logging.rb
Rails.application.config.filter_parameters += [:password]
ここにパラメータを追加することで、フィルタ対象を増やすことができます。
例えばjsからbase64形式で画像データを送ってもらう場合、フィルタをしておかないとログにbase64の文字情報がひたすら記録されてしまい、他のログを追うのが大変になってしまいます。
そこで
# base64画像のパラメータ名がimage_base64で送られてくる想定
Rails.application.config.filter_parameters += [:password, :image_base64]
と書いておけば以下のようにフィルタリングされるためログがすっきりします。
Parameters: {"image_base64"=>"[FILTERED]"}
参考
- RailsログでJSONの一部を隠す方法 - masarakki's blog[amazonjs asin="4844335928" locale="JP" title="実践Ruby on Rails 4 現場のプロから学ぶ本格Webプログラミング"]