通常は安全ですが、コードが管理下のシステム (Web サーバーなど) で実行されている場合、例外をエンド ユーザーに表示できるようにするかどうかを決定する必要があります。例外のエラー メッセージに内部情報を表示することは、システムの構築方法に関する情報を明らかにする可能性があり、攻撃者が例外を強制することで脆弱性を調査できるため、情報漏えいの一形態です。これはデスクトップ アプリケーションの場合は当てはまらない可能性があります。これは事実上ユーザーの制御下にあるためですが、Web またはインターネット ベースのアプリケーションには特に注意が必要です。
ただし、カスタム エラー ハンドラー ページにロジックを追加して、派生し MyUserExceptionClass
た例外の詳細のみを表示し、エンド ユーザーがエラーを修正できる場合にのみ使用するポリシーを作成することができます。この場合、おそらくメッセージ自体のみを表示し、スタック トレースやその他の詳細を出力したくないでしょう。この場合、エンド ユーザーに関連する場合は、例外メッセージに引数名の詳細を含める必要があります。
diethreetimesの答えのポイントに対処するために、これらは例外スロークラスまたは例外クラス自体に関係するべきではありません。サニタイズされていないデータを使用するクラスは、出力されるコンテキストのためにサニタイズする必要があります。
例えば
- HTML ページに出力する場合、HTML は、例外スローの時点ではなく、出力の時点で例外メッセージをエンコードします。
- エラー ログ クラスは、サニタイズされていないテキストをログの正しい形式にサニタイズする必要があります。文字制限がある場合、または CSV 形式のファイルである場合、このクラスは、メッセージ内のコンマと引用符がこの時点で適切にフォーマットされていることを確認する必要があります。
- データベースに書き込まれる場合、パラメーター化されたクエリを使用して情報をデータベースに正しく書き込むのは、データ アクセス レイヤー次第です。