ほとんどの例外を正常に処理するアプリケーションを作成しました。ページのデザインはそのままで、かなりのエラーメッセージが表示されます。私のアプリケーションはPage_Error
イベントでそれらをすべてキャッチし、HttpContext.Curent.Context.Items
に例外を追加し、次にServer.Transfer
をError.aspx
ページに追加します。私はこれがASP.NETの唯一の実行可能な解決策であると考えています。集中した一般的な方法でそれを行う方法は他にないようです。ASP.NETで正常にハンドルするURIを正しく処理する
私はApplication_Error
も処理していますが、正常に処理できるかどうかを調べるために発生した例外については、いくつか点検を行います。私が優雅に扱えることがわかった例外は、誰かがURIをハックして.NETフレームワークがファイルシステムレベルで危険または基本的に違法であると考える文字の後にスローされたものです。
このようなURIは、例えばのようになります。:
http://exmample.com/"illegal"
http://example.com/illegal"/
http://example.com/illegal /
(最後のURIの末尾にスラッシュの前のスペースに注意してください)。
私は、これらのURIが "404 Not Found"とフレンドリーなメッセージで応答し、DDoS攻撃のベクターなどを避けるためにエラーレポートを送信しないようにしたいと思います。私は、しかし、これらのタイプのエラーをキャッチするエレガントな方法が見つかりませんでした。私が今やっていることはexception.TargetSite.Name
プロパティを検査し、それがCheckInvalidPathChars
、ValidatePath
かCheckSuspiciousPhysicalPath
に等しいだ場合、私はそれを「パス検証の例外」を検討し、これはしかし、ハックのように思える404
で応答です。まず、メソッド名のリストはおそらく完全ではないでしょうし、第2に、これらのメソッド名が改行されたり、名前が改行されてコードが破損する可能性があります。
誰も私がこのハードコードされていない、はるかに将来的に耐えられる方法をどのように処理できるか考えていますか?
PS:私のアプリケーションでは、任意の解決策にとって重要であれば、きれいで分かりやすいURIを使用するためにSystem.Web.Routing
を使用しています。
私はこれが最善の解決策であることに同意します。実際に問題が発生する前に問題を処理すると、サーバーリソースが節約されます。私はあなたのモジュールでそれを追加したいと思うかもしれません、あなたはHttpApplication.BeginRequestイベントにcheck url関数をつけてください。 – regex
提案していただきありがとうございます。私はこれを少し違って実装しましたが、時間が許せばそのロジックのほとんどをHttpModuleに取り出すでしょう。 –