Springの詳細なエラー属性の公開

Springの詳細なエラー属性の公開

説明

Spring Bootのエラー応答に例外メッセージ、スタックトレース、バインディングエラー、内部パスなどが含まれると、アプリケーションの構造や入力検証の失敗内容が分かってしまいます。本番の応答では詳細情報を最小限にしてください。

想定される影響

  • クラス名、パス、クエリ、内部状態の漏えい
  • 攻撃用の入力の調整や攻撃の自動化に役立つ情報の公開
  • 機密情報を含む例外メッセージの漏えい

対処方法

  1. 本番の応答では、メッセージ、スタックトレース、バインディングエラー、例外型の公開を制限してください。Spring Boot 3.xは以下のserver.error.*を使います。Spring Boot 4.xでは対応するspring.web.error.*を確認してください。
  2. カスタムエラーには一般的なメッセージと追跡IDだけを含めてください。
  3. 必要な詳細情報はアクセスを制限したサーバーログに記録し、パスワードやトークンを除外してください。独自のエラー処理が設定とは別に詳細を返していないかも確認してください。

例

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

説明:

  • 変更前: メッセージとスタックトレースを既定のエラー応答に常に含めます。
  • 変更後: 指定した詳細属性を既定のエラー応答から除外します。別のコントローラーが返すエラー本文までは整えません。

参考資料