安装安全更新 887219 (MS05-004) 后,浏览或调试 ASP.NET 应用程序时可能收到错误消息


摘要


安装安全更新 MS05-004 后,在浏览或尝试调试某些 ASP.NET 应用程序时,您可能会遇到错误。 本文描述您可能会收到的不同错误消息。 本文还提供了这些问题的解决方案。

症状


安装安全更新 MS05-004 后,在浏览或调试 Microsoft ASP.NET 应用程序时,如果其中的 URL 以反斜杠 (\) 结尾,可能会收到下列错误消息之一:
The resource cannot be found.


Description: HTTP 404。 您查找的资源(或其中一个依赖项)可能已被删除,名称已更改,或暂时不可用。 Please review the following URL and make sure that it is spelled correctly.

Error while trying to run project: Unable to start debugging on the web server. Could not start ASP.NET or ATL Server Debugging. Verify that the ASP.NET or ATL server is currently installed on the server.

原因


如果 Microsoft Internet Information Services (IIS) 元数据库中指定的 URL 以反斜杠结尾,就会出现此问题。

解决方案


要解决此问题,请删除 IIS 元数据库中为受影响的 Web 应用程序指定的 URL 中的斜杠。 为此,请使用下列方法之一。

方法 1: 使用 IIS 管理器

  1. 单击“开始”,单击“运行”,键入 cmd,然后单击“确定”
  2. 找到 %systemroot%\system32\inetsrv 目录。
  3. 在命令提示符处,键入inetmgr 以打开 IIS 管理器。
  4. 右键单击该网站以获得要更改的 URL,然后单击属性
  5. 如果受影响的应用程序在网站的虚拟目录下,请单击目录选项卡,然后从本地路径文本框中指定的路径中删除尾部反斜杠。

    如果受影响的应用程序在网站的根目录下,请单击主目录选项卡,然后从本地路径文本框中指定的路径中删除尾部反斜杠。
  6. 单击“应用”,然后单击“确定”

方法 2: 使用 .vbs 脚本

  1. 使用以下代码示例 tp 创建 .vbs 脚本:
    Option Explicit

    Dim objWebService, objWebSite
    Dim objSite, objArgs, strServer
    Dim WshNetwork

    Set objArgs = WScript.Arguments

    If objArgs.Length = 1 Then
    strServer = objArgs(0)
    ElseIf objArgs.Length = 0 Then
    Set WshNetwork = CreateObject("WScript.Network")
    strServer = WshNetwork.ComputerName
    Else
    WScript.Echo "Usage: CScript ModifyVDir.vbs [servername]"
    WScript.Quit
    End If
    WScript.Echo "Connecting to " & strServer

    Set objWebService = GetObject("IIS://" & strServer & "/W3SVC")

    For Each objWebSite in objWebService
    Set objSite = GetObject(objWebSite.AdsPath)
    If objSite.Class = "IIsWebServer" Then
    WScript.Echo objSite.AdsPath
    EnumVDir objSite, 1
    End If
    Next

    WScript.Echo "Done processing."

    Sub EnumVDir(objVDir, i)
    Dim objSubVDir, objDir
    Dim strNewPath

    For Each objSubVDir in objVDir
    If objSubVDir.Class = "IIsWebVirtualDir" Then
    Set objDir = GetObject(objSubVDir.AdsPath)

    If ((Right(objDir.Path, 1) = "\") and (Right(objDir.Path, 2) <> ":\")) Then
    WScript.Echo Space(i*3) & objDir.AdsPath
    WScript.Echo Space(i*3) & "Path = " & objDir.Path

    strNewPath = Left(objDir.Path, Len(objDir.Path) - 1)
    WScript.Echo Space(i*3) & "New Path = " & strNewPath

    objDir.Put "Path", strNewPath
    objDir.SetInfo
    End If

    EnumVDir objDir, i + 1
    End If
    Next
    End Sub

  2. 从命令行运行该 .vbs 脚本。 为此,请按以下步骤操作:
    1. 单击“开始”,单击“运行”,键入 cmd,然后单击“确定”
    2. 在命令提示符处,键入

      cscript [file_name.vbs]


      注意:file_name 是 .vbs 脚本名称的占位符。
    3. 要关闭命令提示符,请键入 exit

更多信息


应用此安全更新后,ASP.NET 会对物理路径和请求的虚拟路径的有效性执行更严格的检查。

参考


有关 MS05-004 安全更新的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:

887219 (MS05-004): ASP.NET 路径验证漏洞可能允许未经授权的访问