例外情報をエンドユーザーに公開するとセキュリティリスクが発生することは既知の事実です。攻撃者は、内部でどのように機能するかを把握して攻撃することができるためです。しかし、その情報がAPIを使用する開発者に関連する可能性があるWebサービスについてはどうでしょうか。
一方では完全なスタックトレースを公開し、さらにはメッセージにデータベース情報が含まれている可能性があるため、メッセージでさえ危険です。一方、何かがうまくいかず、サーバーが「申し訳ありません」と言っただけの場合、開発者は不満を感じるでしょう。本当に適切な方法は、知っているすべての例外を安全な方法で処理することです。つまり、ビジネス/検証の例外をキャッチし、特別なエラーコードとメッセージ(スタックトレースなし)でそれを返します。
しかし、私はここでそれを行う一般的な方法は何であり、どのアプローチがセキュリティの観点から取られるべきかをここに述べたいと思います。
APIは、スタックトレースなどの内部情報を公開しないでください。あなたが本当に気づいたように、彼らは実装を攻撃するために使われるかもしれない情報を漏らすかもしれません。
さらに、それらは通常、APIの開発者にのみ関連し、APIのユーザーには関連しません。これらのユーザーはとにかく適切なエラーメッセージを期待し、API開発者にこれが何を意味するかを最初に尋ねる必要があり、開発者がソースコードを調べる必要があるような奇妙なメッセージを期待しません。したがって、ユーザーにとって意味のあるものではなく、スタックトレースをユーザーに投げるだけの場合、これはセキュリティの問題ではなく、APIのユーザビリティの問題になる可能性があります。
通常、2種類の例外があります。
これは使いやすさとセキュリティの問題です。
API、特にa REST one、友好的でなければなりません、自己文書化。これには、正確なエラー、考えられる原因、スタックなどを示すわかりやすいエラーが含まれます。
一方、フレンドリーは危険だと思います...
だから答えは:はい、それはセキュリティの問題です。この情報は、潜在的な攻撃者があなたのAPIについてもっと知るのに役立ちます。
それを行う一般的な方法は?
ASP.NETでは、web.configで設定を行い、詳細はエラーです(CustomErrors)。
デフォルトの設定では一般的な安全なエラーが表示されますが、同じコンピューターから閲覧している場合は例外です、完全なエラーが表示されます。このようにして、ローカルコンピューターの開発者はエラーを確認できますが、いったん環境にデプロイすると、詳細なエラー情報を確認できません。
<?xml version="1.0"?>
<configuration>
<system.web>
<customErrors mode="Off"/>
</system.web>
</configuration>