私は、ほとんどの例外を適切に処理するアプリケーションを作成しました。ページのデザインはそのままで、かなりのエラーメッセージが表示されます。私のアプリケーションはイベントでそれらすべてをキャッチしPage_Error
、そこで例外を追加しHttpContext.Curent.Context.Items
てServer.Transfer
からError.aspx
ページに実行します。一元化された一般的な方法でそれを行う他の方法はないように思われるので、これがASP.NETで唯一の実行可能なソリューションであることがわかりました。
私も処理しApplication_Error
、そこで発生した例外を検査して、正常に処理できるかどうかを確認します。私が適切に処理できることがわかった例外は、誰かがURIをハッキングして文字を含むようにした後にスローされるものです。.NETFrameworkは、ファイルシステムレベルで危険または基本的に違法であると見なします。
このようなURIは、次のようになります。
http://exmample.com/"illegal"
http://example.com/illegal"/
http://example.com/illegal /
(最後のURIの最後にあるスラッシュの前のスペースに注意してください)。
これらのURIは、「404 Not Found」とわかりやすいメッセージで応答し、DDOS攻撃ベクトルなどを回避するためにエラーレポートが送信されないようにしたいと思います。ただし、これらのタイプのエラーをキャッチするためのエレガントな方法は見つかりませんでした。私が今していることは、プロパティを検査することです。それが、、またはにexception.TargetSite.Name
等しい場合、それを「パス検証例外」と見なし、404で応答します。CheckInvalidPathChars
ValidatePath
CheckSuspiciousPhysicalPath
ただし、これはハックのようです。まず、メソッド名のリストはおそらく完全ではありません。次に、これらのメソッド名が置き換えられたり、名前が変更されたりして、コードが破損する可能性があります。
このハードコーディングが少なく、将来性のある方法をどのように処理できるか、誰かが考えていますか?
PS:System.Web.Routing
特定のソリューションにとって重要な場合は、アプリケーションでクリーンで適切なURIを使用しています。