本番環境に残されたデバッグコード

本番環境に残されたデバッグコード

説明

本番コードに debugger 文やリクエストデータを出力する一時的なログが残ると、内部状態、個人情報、認証の流れが露出するおそれがあります。debugger 文は、デバッガーが接続されて有効な場合に、実行を停止させる可能性があります。

想定される影響

  • 機密性の高いリクエストデータが、ログやコンソールに出力されるおそれがあります。
  • デバッガーのブレークポイントで、本番の処理が予期せず停止する可能性があります。

対処方法

  • 本番コードから debugger 文と一時的なデバッグログを削除してください。
  • 必要な診断ログには、構造化ログと機密情報のマスキング方針を適用してください。

例

変更前

javascript
app.get("/profile", (req, res) => {
  console.log("profile request", req.body);
  res.end();
});

変更後

javascript
app.get("/profile", (req, res) => {
  auditLogger.info({ userId: req.session.user.id }, "profile viewed");
  res.end();
});

解説:

  • 変更前: デバッグログから、リクエスト本文や内部の機密情報が漏れる可能性があります。残された debugger 文も、デバッガーが有効な場合は実行を停止させるおそれがあります。
  • 変更後: 本文全体の代わりに、必要なイベントとユーザー識別子だけを記録します。認証済みのセッションと auditLogger が用意されている前提です。ユーザー識別子も個人情報となる場合があるため、ログのアクセスと保管期間を制限してください。

参考資料