利用 HTTP 模組檢查 ASP.NET 相關的規範化問題

文章翻譯 文章翻譯
文章編號: 887289 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

為了協助客戶保護他們的 ASP.NET 應用程式,Microsoft 已經提供 HTTP 模組,以實作規範化的最佳實務做法。 如需詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
887459 如何以程式設計的方式測試與 ASP.NET 相關的規範化問題
如需有關如何判斷 ASP.NET 版本的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
318785 Determine whether service packs are installed on the .NET Framework
如需有關 ASP.NET 規範化問題的詳細資訊,請造訪下列 Microsoft 網站:
http://www.microsoft.com/taiwan/security/incident/aspnet.mspx

徵狀

當網頁伺服器收到 URL 時,伺服器就會將要求對應到檔案系統路徑,以判斷如何發出回應。 用來對應要求的規範化常式必須正確地剖析 URL,才能避免提供或處理未預期的內容。 無法處理的規範化問題可能會導致未預期的結果。如需有關規範化的詳細資訊,請造訪下列 Microsoft 網站:
http://msdn2.microsoft.com/en-us/library/aa302420.aspx

解決方案

Microsoft.Web.ValidatePathModule.dll - HTTP 模組

下載資訊

您可以從「Microsoft 下載中心」下載下列檔案:

摺疊此圖像展開此圖像
下載
立即下載 VPModule.msi 套件。

發行日期:2004 年 10 月 7 日

如需有關如何下載 Microsoft 技術支援檔案的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
119591 如何從線上服務取得 Microsoft 支援檔案
Microsoft 已對這個檔案做過病毒的掃描。Microsoft 是利用發佈當日的最新病毒偵測軟體來掃描檔案,看看有沒有病毒感染。檔案會儲存在安全的伺服器上,以避免任何未經授權的更改。

先決條件

VPModule.msi 檔案是設計用於 32 位元的 Microsoft .NET Framework。

安裝 VPModule.msi 檔案之前,請先備份電腦上 Machine.config 檔的所有執行個體。如果要備份 Machine.config 檔,請執行下列步驟:
  1. 按一下 [開始],再按一下 [執行],輸入 cmd,然後按一下 [確定]
  2. 找出每個版本的 Machine.config 檔。Machine.config 檔是儲存在下列資料夾中,其中 <framework version number> 是您所安裝的 Microsoft .NET Framework 版本:
    %windir%\Microsoft.NET\Framework\<framework version number>\CONFIG
    例如,如果 .NET Framework 1.1 安裝在 C 磁碟機上,請輸入下列命令,然後按下 ENTER:
    cd /d %windir%\microsoft.net\framework\v1.1.4322\config
  3. 輸入下列命令,以備份 Machine.config 檔,然後按下 ENTER:
    copy machine.config machine.config.bak
針對系統上所安裝 .NET Framework 的每個執行個體重複這些步驟。

安裝資訊

Microsoft 已經發行名為 VPModule.msi 的安裝套件,VPModule.msi 檔案會在您的系統上安裝 Microsoft.Web.ValidatePathModule.dll 檔。此安裝會在所有已安裝的 .NET Framework 版本上,利用全新的 HTTP 模組項目更新 Machine.config 檔。

如果要使用安裝套件,請下載 VPModule.msi 檔,然後按兩下套件開始安裝,接著依照安裝指示執行。

VPModule.msi 的作用

首先,安裝程式會解壓縮名稱為 Microsoft.Web.ValidatePathModule.dll 的檔案,接著更新系統上存在的所有 Machine.config 檔案,如此,檔案就會具有類似下列的項目:
    <system.web>
        <httpModules>
            <add name="ValidatePathModule" type="Microsoft.Web.ValidatePathModule, Microsoft.Web.ValidatePathModule, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eba19824f86fdadd"/>
        </httpModules>
    </system.web>
然後,安裝程式會將 Microsoft.Web.ValidatePathModule.dll 檔加入「全域組件快取」(GAC,Global Assembly Cache) 中。

如果開發人員想要瞭解 Microsoft.Web.ValidatePathModule.dll 檔以程式設計方式執行哪些操作,可以從下列取得原始碼:
namespace Microsoft.Web {
??? public class ValidatePathModule : IHttpModule {
??????? public ValidatePathModule() {
??????? }
??????? void IHttpModule.Init(HttpApplication app) {
??????????? app.BeginRequest += new EventHandler(this.OnBeginRequest);
????? ??}
??????? void IHttpModule.Dispose() {
??????? }
??????? void OnBeginRequest(Object source, EventArgs eventArgs) {
??????????? HttpRequest request = (source as HttpApplication).Request;
??????????? string physicalPath = request.PhysicalPath;
??????????? if (request.Path.IndexOf('\\') >= 0 || Path.GetFullPath(physicalPath) != physicalPath) {
??????????????? throw new HttpException(404, "Not Found");
??????????? }
??????? }
??? }
}
如需有關可以用來安裝模組的命令列參數,請造訪下列 Microsoft 網站:
http://msdn2.microsoft.com/en-us/library/aa367988.aspx

安裝確認資訊

正確地安裝模組之後,下列登錄機碼就會存在:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{30EFFF0C-573D-46FB-8AD5-00887289261A}
注意 如果您依照<自訂安裝資訊>一節所述的方式手動安裝 HTTP 模組,系統上就不會出現此登錄機碼。/a 選項只會解壓縮檔案, 並不會更新登錄。

移除資訊

如果要移除這些變更,請執行 VPModule.msi 檔並選取 [Remove] 選項。 或者,您可以使用「控制台」中的 [新增/移除程式]

自動安裝資訊

使用下列命令,可以在自動安裝模式中安裝這些變更:
msiexec /i vpmodule.msi /qb-
使用下列命令,可以在自動安裝模式中移除這些變更:
msiexec /x vpmodule.msi /qb-

自訂安裝資訊

如果要手動安裝 HTTP 模組,請依照下列步驟執行:
  1. 備份您的 Machine.config 檔案。如需有關如何執行這項操作的詳細資訊,請參閱本文<先決條件>一節。
  2. 下載套件。如需有關如何執行這項操作的詳細資訊,請參閱本文<下載資訊>一節。
  3. 使用下列命令,可以將 VPModule.msi 檔案中的 Microsoft.Web.ValidatePathModule.dll 檔解壓縮到您選擇的位置:
    msiexec /a vpmodule.msi
  4. 使用下列命令,可以將模組複製到 GAC:
    gacutil -i microsoft.web.validatepathmodule.dll
    注意 模組會解壓縮到名稱為 Microsoft ValidatePath Module 的資料夾,而資料夾則是位於您指定的位置底下。
  5. 編輯 Machine.config 檔,將下列項目新增至 <httpModules> 區段:
    <add name="ValidatePathModule" type="Microsoft.Web.ValidatePathModule, Microsoft.Web.ValidatePathModule, Version=1.0.0.0, Culture=neutral, PublicKeyToken=eba19824f86fdadd"/>
    

已知問題

下列為已知的問題:
  • 安裝程式會確保 Machine.config 檔案已經由 Microsoft.Web.ValidatePathModule.dll 檔的 <httpModule> 項目成功地更新。 然而,在某些情況下,可能還是會發生所述的問題。

    如果系統上存有 Web.config 檔案,並且該檔清除了 Machine.config 等級所定義的清單,可能就會發生這個問題。例如,類似下列 Web.config 檔案中的項目可能會造成這個問題:
    <httpModules>
        <clear/>
    </httpModules>
    
    這個組態會造成用來減輕問題影響範圍的模組無法在這種特殊應用程式中執行。當應用程式不想使用 Machine.config 等級所定義的 HTTP 模組,而想要清除清單,然後為目前應用程式定義專用的新清單時,通常就會出現這種組態。
  • 如果您安裝不同版本的 .NET Framework,就必須先解除安裝 VPModule.msi 檔案,再重新安裝。
  • 如需有關 SQL Server Reporting Services 及 VPModule.msi 問題的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
    887787 You may receive error messages from Reporting Services after you install the ASP.NET ValidatePath Module

?考

如需詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
887405 How to use Windows Installer and Group Policy to deploy the VPModule.msi in an Active Directory domain
如需詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
887404 如何使用 Systems Management Server 2003 來部署 ValidatePath 模組
如需詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
887290 如何使用 ASP.NET ValidatePath 模組掃描器 (VPModuleScanner.js)
如需有關工作階段狀態的詳細資訊,請造訪下列 Microsoft 網站:
http://msdn2.microsoft.com/en-us/library/87069683(vs.71).aspx

屬性

文章編號: 887289 - 上次校閱: 2007年12月3日 - 版次: 3.7
這篇文章中的資訊適用於:
  • 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
  • Microsoft .NET Framework Software Development Kit 1.0 Service Pack 2
  • Microsoft .NET Framework Software Development Kit 1.0 Service Pack 1
  • Microsoft .NET Framework Software Development Kit 1.0 Service Pack 2
關鍵字:?
kbsecurity kbtshoot KB887289
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