Asp.net

以 %20 結尾的 URL 存在問題

  • March 11, 2011

我有一個大問題。現場有設備發送 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 版本的可行解決方案。在相關執行緒中查看此答案。它基本上歸結為PreSendRequestHeadersglobal.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?

引用自:https://stackoverflow.com/questions/1126735