Asp.net
URL 路由、圖像處理程序和“潛在危險的 Request.Path 值”
我已經遇到這個問題已經有一段時間了,並決定嘗試通過在此處發布問題來一勞永逸地徹底解決問題。我在位於此處的 .net 4 網站中有一個圖像處理程序:
<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+ 帶有非常嚴格的內置請求驗證,其中一部分是 url 中可能用於 XSS 攻擊的潛在危險字元。以下是 url 中預設的無效字元:
< > * % & : \ ?您可以在配置文件中更改此行為:
<system.web> <httpRuntime requestPathInvalidCharacters="<,>,*,%,&,:,\,?" /> </system.web>或者回到 .Net 2.0 驗證:
<system.web> <httpRuntime requestValidationMode="2.0" /> </system.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) 的未轉義版本,它又
?是這是一篇關於請求驗證以及如何處理它的好文章