説明
catch ブロックが空の場合や、ログを残すだけで失敗を処理しない場合、呼び出し元に失敗が伝わらず、不正な状態で処理が続くおそれがあります。ログは診断に役立ちますが、失敗の応答や復旧処理の代わりにはなりません。
想定される影響
- セキュリティ検証に失敗しても、成功したかのように処理が続く可能性があります。
- ファイル操作、認証、暗号処理の失敗が隠されるおそれがあります。
対処方法
- 例外を記録し、呼び出し元に失敗を返すか、例外を再スローしてください。
- 復旧できる特定の例外だけを処理し、復旧動作をコードに明示してください。
例
変更前
javascript
try {
verifySignature(input);
} catch (err) {
}
変更後
javascript
try {
verifySignature(input);
} catch (err) {
logger.error({ err }, "signature verification failed");
throw err;
}
解説:
- 変更前: 空の処理で失敗が隠され、その後の処理が続きます。ログだけを追加しても、失敗の応答や復旧にはなりません。
- 変更後: エラーを記録して再スローし、成功したかのような処理の継続を防ぎます。ログの機密値をマスクし、アクセスも制限してください。