Asp.net
以 %20 結尾的 URL 存在問題
我有一個大問題。現場有設備發送 URL“/updates”。這是這些設備的開發人員的錯字。在伺服器日誌中,它看起來像“/updates+”。
我有一個 ManageURL 重寫模組,可以處理所有沒有擴展的請求。但是這個請求會導致一個 HttpException:
System.Web.HttpException: System.Web.HttpException at System.Web.Util.FileUtil.CheckSuspiciousPhysicalPath(String physicalPath) at System.Web.HttpContext.ValidatePath() at System.Web.HttpApplication.ValidatePathExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)正如我在日誌中看到的,URL 重寫模組甚至沒有得到這個 URL,所以我不能在那裡修復它。
有沒有辦法用 ASP.NET 處理這些 URL?
好的,這是一個舊執行緒,但我想添加一個適用於所有 ASP.NET 版本的可行解決方案。在相關執行緒中查看此答案。它基本上歸結為
PreSendRequestHeaders在global.asax.cs.或者,當在 ASP.NET 4.0 或更高版本上時,
<httpRuntime relaxedUrlToFileSystemMapping="true" />在 web.config 中使用。
據一些人說,這是在
System.Web.dll:internal static void CheckSuspiciousPhysicalPath(string physicalPath) { if (((physicalPath != null) && (physicalPath.Length > 0)) && (Path.GetFullPath(physicalPath) != physicalPath)) { throw new HttpException(0x194, ""); } }我猜你不能改變它,但不能在 IIS 設置中禁用它嗎?當然,這也會禁用所有其他檢查… :-(
或者寫一些在上述程式碼之前執行的 ISAPI 過濾器?根據在 ASP.NET 中優雅地處理 URI的說法,編寫自己的模組據說很容易。
或者,創建您自己的錯誤頁面。在此頁面中(如上面 URI hacking 連結中建議的那樣)搜尋 中的特定文本
exception.TargetSite.Name,例如CheckSuspiciousPhysicalPath,如果找到(或只是總是)查看current.Request.RawUrl或類似的內容,清除錯誤並重定向到修復的 URL?