空の例外処理ブロック

空の例外処理ブロック

説明

catch ブロックが空の場合や、ログを残すだけで失敗を処理しない場合、呼び出し元に失敗が伝わらず、不正な状態で処理が続くおそれがあります。ログは診断に役立ちますが、失敗の応答や復旧処理の代わりにはなりません。

想定される影響

  • セキュリティ検証に失敗しても、成功したかのように処理が続く可能性があります。
  • ファイル操作、認証、暗号処理の失敗が隠されるおそれがあります。

対処方法

  • 例外を記録し、呼び出し元に失敗を返すか、例外を再スローしてください。
  • 復旧できる特定の例外だけを処理し、復旧動作をコードに明示してください。

例

変更前

javascript
try {
  verifySignature(input);
} catch (err) {
}

変更後

javascript
try {
  verifySignature(input);
} catch (err) {
  logger.error({ err }, "signature verification failed");
  throw err;
}

解説:

  • 変更前: 空の処理で失敗が隠され、その後の処理が続きます。ログだけを追加しても、失敗の応答や復旧にはなりません。
  • 変更後: エラーを記録して再スローし、成功したかのような処理の継続を防ぎます。ログの機密値をマスクし、アクセスも制限してください。

参考資料