説明
Spring Bootのエラー応答に例外メッセージ、スタックトレース、バインディングエラー、内部パスなどが含まれると、アプリケーションの構造や入力検証の失敗内容が分かってしまいます。本番の応答では詳細情報を最小限にしてください。
想定される影響
- クラス名、パス、クエリ、内部状態の漏えい
- 攻撃用の入力の調整や攻撃の自動化に役立つ情報の公開
- 機密情報を含む例外メッセージの漏えい
対処方法
- 本番の応答では、メッセージ、スタックトレース、バインディングエラー、例外型の公開を制限してください。Spring Boot 3.xは以下の
server.error.*を使います。Spring Boot 4.xでは対応するspring.web.error.*を確認してください。 - カスタムエラーには一般的なメッセージと追跡IDだけを含めてください。
- 必要な詳細情報はアクセスを制限したサーバーログに記録し、パスワードやトークンを除外してください。独自のエラー処理が設定とは別に詳細を返していないかも確認してください。
例
Spring Boot 3.xの既定のエラー応答に対する設定例です。実際の応答を確認し、独自の応答にも同じ情報最小化の原則を適用してください。
変更前
properties
server.error.include-message=always
server.error.include-stacktrace=always
変更後
properties
server.error.include-message=never
server.error.include-stacktrace=never
server.error.include-binding-errors=never
server.error.include-exception=false
説明:
- 変更前: メッセージとスタックトレースを既定のエラー応答に常に含めます。
- 変更後: 指定した詳細属性を既定のエラー応答から除外します。別のコントローラーが返すエラー本文までは整えません。