説明
パスワード、トークン、セッションID、APIキー、個人情報をログへ平文で記録すると、ログ収集基盤、運用画面、バックアップ、障害調査ツールを通じて漏えいする可能性があります。ログはアプリケーションのデータベースより広い範囲で共有されることがあり、別途保護が必要です。
想定される影響
- 認証情報やセッショントークンの漏えい
- 個人情報の公開
- 長期間保存されたログによる継続的なリスク
対処方法
- 機密値をログに記録しないでください。
- 調査に識別子が必要な場合は、固定のマスク文字列や別の追跡IDを使ってください。単純なハッシュだけでは、シークレットを安全に記録できるとは限りません。
- ログのアクセス権限、保存期間、転送時の暗号化を管理してください。
例
ロガーと変数の宣言を省略した抜粋です。変更後のuserIdも個人情報になり得るため、記録の必要性、アクセス権限、保存期間を確認してください。
変更前
java
logger.info("password={}", password);
logger.debug("token={}", accessToken);
変更後
java
logger.info("login attempt for userId={}", userId);
logger.debug("token present={}", accessToken != null);
説明:
- 変更前: パスワード、トークン、セッション識別子、APIキーをログや標準出力へ書くと、ログへのアクセスだけでアカウントの侵害や情報漏えいにつながるおそれがあります。
- 変更後: パスワード、トークン、セッション識別子、Authorizationの値を記録しません。