如何以程式設計的方式測試與 ASP.NET 相關的規範化問題

文章翻譯 文章翻譯
文章編號: 887459 - 檢視此文章適用的產品。

免責聲明

「Microsoft 知識庫」中的資訊係依「現狀」提供,不含任何形式之瑕疵責任擔保。Microsoft 不以暗示或其他方式,提供與這些產品的效能或可靠性有關的保證。無論任何情況下的損害,Microsoft Corporation 及其供應商皆不負任何法律責任,包括直接、間接、偶發意外、推衍引發、業務利潤損失或特殊損害。即使 Microsoft corporation 及其供應商已被告知此類損害的可能性亦不負任何責任。某些地區並不允許排除及限制推衍後果或意外損害責任, 因此前述限制不適用於這些地區。
全部展開 | 全部摺疊

在此頁中

簡介

本文將告訴您,如何將更多安全防護新增至 ASP.NET 應用程式,以避免發生常見的規範化問題。

其他相關資訊

什麼是規範化?

規範化是指,將各種相同形式的名稱解析成單一標準名稱的程序, 此單一標準名稱也稱為規範名稱。例如,在特定電腦中,名稱為 c:\dir\test.dat、test.dat 及 ..\..\test.dat 可能都是指同一個檔案。所謂規範化,就是將這類名稱對應到類似 c:\dir\test.dat 名稱的程序。

當網站伺服器收到 URL 時,伺服器就會將要求對應到檔案系統路徑,以判斷如何發出回應。用來對應要求的規範化常式必須正確地剖析 URL,才能避免提供或處理未預期的內容。如需有關規範化的詳細資訊,請造訪下列 Microsoft 網站:
http://msdn2.microsoft.com/en-us/library/aa302420.aspx
我們建議您採用最佳的實務做法,以保護應用程式的安全。如需詳細資訊,請參閱下列章節。

將額外的規範化安全防護新增至您的 Web 應用程式

Microsoft ASP.NET 開發人員可以在儲存於 Web 應用程式根目錄的 Global.asax 檔案中新增 Application_BeginRequest 事件處理常式,來增加更多檢查,以防止 Web 應用程式發生規範化問題。此事件處理常式會執行每個網站要求, 您可以在這個事件處理常式中插入程式碼,以避免發生規範化問題。

程式碼範例

下列程式碼範例說明如何將 Application_BeginRequest 事件處理常式新增至 Global.asax 檔案中。這個事件處理常式會藉由執行路徑驗證,以協助防範出現無效字元和格式錯誤的 URL。因此,您就可以避免發生常見的規範化問題。

Global.asax 程式碼範例 (Visual Basic .NET)

<script language="vb" runat="server">
Sub Application_BeginRequest(Sender as Object, E as EventArgs)
    If (Request.Path.IndexOf(chr(92)) >= 0 OR _
        System.IO.Path.GetFullPath(Request.PhysicalPath) <> Request.PhysicalPath) then
        Throw New HttpException(404, "Not Found")
    End If
End Sub
</script>

Global.asax 程式碼範例 (C#)

<script language="C#" runat="server">
void Application_BeginRequest(object source, EventArgs e) {
    if (Request.Path.IndexOf('\\') >= 0 ||
        System.IO.Path.GetFullPath(Request.PhysicalPath) != Request.PhysicalPath) {
        throw new HttpException(404, "not found");
    }
}
</script>

屬性

文章編號: 887459 - 上次校閱: 2007年12月3日 - 版次: 2.5
這篇文章中的資訊適用於:
  • Microsoft ASP.NET 1.0
  • Microsoft ASP.NET 1.1
  • Microsoft .NET Framework 1.0
  • Microsoft .NET Framework 1.0 Service Pack 1
  • Microsoft .NET Framework 1.0 Service Pack 2
  • Microsoft .NET Framework 1.0 Service Pack 3
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.1 Service Pack 1
關鍵字:?
kbsecurity kbtshoot KB887459
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com