filter_parameter_logging.rbって?
config/initializers
配下にあるRailsがデフォルトで提供している本番ログにセキュアな情報(パスワード等)が流れないようにする仕組みです。(Rails4系からあるのかな?)
実際の活用方法について
業務で使っていると仕様変更やその時の都合で実装を変えていかないといけない場面があると思います。
例えば、Userに関する情報をフロント側からサーバーサイドにPOSTするフォームで当初パラメーターの一つを info
という名前で実装していましたが、 info
というパラメータ名だと意味が広くなり過ぎます。そこで user_info
というパラメーターに変更するとなった場合を仮定します。
例となるファイル
filter_parameter_logging.rb
Rails.application.config.filter_parameters += [ :password, :info ]
やらないといけないこと
- infoという名前を変える
- 名前を変えても修正したものをデプロイしたリリース直後は両方のパラメーターをフィルターしたい
注意しないといけないこと
パラメーター名が info
から user_info
に変わったことで、この場合に info
というフィルターを user_info
に指定し直すことも出来ます。
しかし、フィルターするパラメータの名前を新しく info
から user_info
に変えて info
の部分を消してしまうと、ユーザーが画面をリロードをしないで操作した場合に、パラメーターは info
でPOSTされるので、個人情報がフィルターされないでPOSTされる事になります。
それを防ぐために以下のようなファイルの記載をします。
info
と user_info
両方がフィルターされるように古いほうを残しておきます。
なお実際はリロードされてパラメーターが変更されないのはデプロイ直後なので、リリースから暫く経ってからは、 フィルターのパラメーター名の指定は :user_info
だけで大丈夫です!
filter_parameter_logging.rb
Rails.application.config.filter_parameters += [ :password, :info, :user_info ]
連番も正規表現で1つのフィルターだけで対応可能
filter_parameter_logging.rb
でフィルターするパラメーター指定は下記の例のように正規表現で指定することも可能です。以下のようにすることで、address1
とaddress2
などの連番のパラメーターにも対応出来ます。
filter_parameter_logging.rb
Rails.application.config.filter_parameters += [ :password, :info, :user_info, /\Aaddress\d?\Z/ ]