VOOZH about

URL: https://qiita.com/kakkunpakkun/items/4639bc653924e2dc8dbe

⇱ Railsのlogに出したくない情報をちゃんと出さないようにする #Rails - Qiita


👁 Image
96

Go to list of users who liked

82

Share on X(Twitter)

Share on Facebook

Add to Hatena Bookmark

More than 5 years have passed since last update.

@kakkunpakkunin👁 Image
freee

Railsのlogに出したくない情報をちゃんと出さないようにする

96
Posted at

ログに残したくない情報

Webアプリケーションを開発していると時々生のままではログに残したくない情報ってありますよね。
パスワード、クレジットカード番号やCVCなんかは残したくないものの代表じゃないかと思います。

よくやる方法

initializersの中でこういうコードを入れるか、

Rails.application.config.filter_parameters += ['password', 'card_number']

application.rbの中でこうするかがよくやる方法じゃないかと。

module TestRailsApp
 class Application < Rails::Application
 config.filter_parameters += ['password', 'card_number']
 end
end

こうするとparamspasswordcard_numberがあれば必ずその値は[FILTERED]になります。

{
 email: 'test@test.test',
 password: '[FILTERED]'
}

下のようにネストされていても、[FILTERED]にしてくれます。

{
 user: {
 password: '[FILTERED]',
 card: {
 card_number: '[FILTERED]'
 }
 }
}

手作業ではネストされてるところはうっかりしがちですが、ちゃんとフィルタリングしてくれるのはありがたい。

これでとりあえず安心

もう少しかゆいところに届くように

しかし、実際はパスワードを確認のためにユーザーに2回パスワードを入れてもらうこともありますよね。
passwordpassword_confirmationみたいに。

そのとき、

config.filter_parameters += ['password', 'card_number']

という書き方ではpassword_confirmationの方がそのままログに出力されてしまい、せっかくpassword[FILTERED]になってても意味がありません。
でも、いちいち

config.filter_parameters += ['password', 'password_confirmation']

というように指定を増やしていくのも大変ですよね。忘れそうだし。

そういう場合を考えて正規表現でのフィルタリングが可能になっています。

config.filter_parameters += [/password/]

雑にこんな風にするだけでもかなり防げます。

passwordという名前が入っている場合はたいていログに残したくないものなのでこうしておくのがいいかなと思ってます。

ActionDispatch::Http::ParameterFilterを使う

ちなみにこの[FILTERED]にする仕組みはActionDispatch::Http::ParameterFilterを使って実現されています。

なので、railsのlogger以外のところでも同様のことをやりたい場合はこういうことも出来ます。

filter = ActionDispatch::Http::ParameterFilter.new([/password/])
filter.filter(params)

rails以外のloggerなどに出力することは時々あるので覚えておくと便利

96

Go to list of users who liked

82
1

Go to list of comments

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
96

Go to list of users who liked

82