私は今かなり長い間この問題を経験しており、いくつかの考えのためにここに質問を投稿することにより、一度限りなくその底に到達しようとすることを決めました。ここにある.net 4 Webサイトに画像ハンドラーがあります。
https://www.amadeupurl.co.uk/ImageHandler.ashx?i=3604 (プライバシーのために実際のドメインを削除)
これは問題なく動作し、問題なくWebサーバーから画像を提供します。URLにアクセスすると正常に動作し、画像がロードされ、例外が生成されないため、問題なく言うことができます。しかし、誰かが昨日この正確なURLにアクセスし、次の行に沿って例外が発生しました。
Exception Generated
Error Message:
A potentially dangerous Request.Path value was detected from the client (?).
Stack Trace:
at System.Web.HttpRequest.ValidateInputIfRequiredByConfig() at System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext context)
Technical Information:
DATE/TIME: 23/01/2013 03:50:01
PAGE: www.amadeupurl.co.uk/ImageHandler.ashx?i=3604
私はエラーメッセージを理解していますが、それは問題ではありません、ここでそれが生成される理由を理解していません。事態を悪化させるために、イメージをロードするリンクをクリックすると言ったように、それを複製することはできません。例外はありません。 URLルーティングを使用しており、次のコードで問題が発生した場合に無視されるようにハンドラーを登録しています。
routes.Ignore("{resource}.ashx")
他にエラーが発生する理由や、他に何を試す必要があるのかはわかりません。
Asp.Net 4.0+には非常に厳密な組み込みのリクエスト検証が付属しています。その一部は、XSS攻撃で使用される可能性のあるURL内の潜在的な危険な文字です。 URLのデフォルトの無効な文字は次のとおりです。
_< > * % & : \ ?
_
構成ファイルでこの動作を変更できます。
_<system.web>
<httpRuntime requestPathInvalidCharacters="<,>,*,%,&,:,\,?" />
</system.web>
_
または、.Net 2.0検証に戻ります。
_<system.web>
<httpRuntime requestValidationMode="2.0" />
</system.web>
_
非常に一般的な無効な文字は_%
_であるため、万が一(攻撃、Webクローラー、または一部の非標準ブラウザー)URLがエスケープされている場合、次のようになります。
_www.amadeupurl.co.uk/ImageHandler.ashx/%3Fi%3D3604
_
これの代わりに:
_www.amadeupurl.co.uk/ImageHandler.ashx/?i=3604
_
_%3F
_は_?
_のエスケープ文字であることに注意してください。この文字は、Asp.Netリクエストバリデーターによって無効と見なされ、例外をスローします。
_A potentially dangerous Request.Path value was detected from the client (?).
_
エラーメッセージには、再び_?
_である文字(%3F)のエスケープされていないバージョンが表示されます
ここに良い記事があります リクエストの検証とその対処方法