如何使用请求筛选配置 WebDAV

作者:Robert McMurray

介绍

Microsoft 发布了一个全新的 WebDAV 扩展模块,已针对 Windows Server© 2008 上的 Internet Information Services 7.0 (IIS 7.0) 完全重写。 这个新的 WebDAV 扩展模块合并了许多新功能,使 Web 作者能够比以前更好地发布内容,并为 Web 管理员提供更多的安全性和配置选项。 Microsoft 发布了适用于 Windows Server® 2008 的 WebDAV 扩展模块的更新,该模块提供共享和独占锁支持,以防止因覆盖而导致更新丢失。

IIS 7.0 提供了多种出色的新安全功能,包括 IIS 7.0 的新请求筛选。 对于熟悉以前版本的 IIS 中 UrlScan 的 IIS 用户而言,IIS 7.0 中的请求筛选功能就像内置的 URLScan。

新的 WebDAV 模块和请求筛选旨在协同工作,本文档将指导你配置与 WebDAV 相关的请求筛选设置和 WebDAV 设置,以设置安全发布环境。 请注意,如果使用 IIS 管理器 UI 配置 WebDAV,则请求筛选设置会自动更新,你无需执行本文中的步骤。

先决条件

必须准备好以下各项才能完成本文中的过程:

  • 必须在服务器上安装 IIS 7.0,并且必须配置以下内容:

    • IIS 7.0 安装时创建的默认网站必须仍然存在。
    • 必须安装请求筛选功能。
  • 必须安装了新的 WebDAV 扩展模块。 有关安装新 WebDAV 模块的信息,请参阅以下文档:

  • 最好了解如何使用 AppCmd。 有关使用请求筛选的详细信息,请参阅以下文档:

注意

需要确保使用完全管理权限来执行本文档中的步骤。 为此,最好采用以下两种方法之一:

  • 使用本地“管理员”帐户登录到计算机。
  • 如果使用具有管理权限的帐户(不是本地“管理员”帐户)登录,请使用“以管理员身份运行”选项打开 IIS 管理器和所有命令提示符会话。

上述条件必须满足,因为 Windows Server 2008 中的用户帐户控制 (UAC) 安全组件将阻止对 IIS 7.0 配置设置的管理访问。 有关 UAC 的详细信息,请参阅以下文档:

基本的请求筛选概念

IIS 7.0 中的请求筛选由基于以下参数的筛选请求组成:

  • 文件扩展名
  • 隐藏段
  • HTTP 谓词
  • 请求限制
  • URL 序列

所有这些请求筛选功能都会影响通过 WebDAV 上传或下载的内容,但某些功能可以配置为与 WebDAV 配合使用。

以下列表描述了可以配置哪些功能来与 WebDAV 配合使用:

  • 以下功能始终影响 WebDAV 请求:

    • 请求限制
    • URL 序列
  • 默认情况下,以下功能会影响 WebDAV 请求,但可以将其配置为绕过 WebDAV 请求:

    • 文件扩展名
    • 隐藏段
    • HTTP 谓词

例如,可以将服务器配置为允许对“.htm”和“.php”文件发出非 WebDAV 请求,阻止对“.mdb”和“.config”文件的访问,同时仍允许 WebDAV 请求访问阻止的内容。

注意

WebDAV 请求需要经过身份验证。

可以使用以下方法之一编辑请求筛选设置:

  • 使用作为 IIS 7.0 管理包的一部分提供的用户界面
  • 从命令行使用 AppCmd
  • 编辑 applicationHost.config 文件
  • 从 .NET 应用程序或 Windows PowerShell 使用 Microsoft.Web.Administration

本演练中的其余信息介绍如何从命令行使用 AppCmd,同时介绍 applicationHost.config 文件中生成的配置设置的大致形式。

注意

本文档不涵盖可使用请求筛选配置的所有功能。 有关配置其他请求筛选选项的信息,请参阅以下主题:

配置请求筛选和 WebDAV

筛选文件扩展名

某些文件扩展名(例如“.config”和“.asax”)受默认请求筛选 fileExtensions 集合的保护。 可以向文件扩展名列表添加其他条目,以便允许或阻止 HTTP 请求,并且可以控制此列表是否适用于 WebDAV 请求。 在此示例中,你将使用 AppCmd 阻止访问“.txt”文件(即使通常可以访问它们),并指定 WebDAV 请求能够访问所有阻止的文件扩展名。

  1. 使用完全管理权限打开命令提示符,并将目录切换到你的 InetSrv 文件夹:

    cd "%WinDir%\System32\InetSrv"
    
  2. 使用以下语法查看现有的请求筛选规则:

    AppCmd list config "Default Web Site/" /section:system.webServer/security/requestFiltering
    
  3. 通过将特定文件扩展名添加到 fileExtensions 集合并使用以下语法为 allowed 属性指定 false,阻止对“.txt”文件的访问:

    AppCmd set config "Default Web Site/" /section:system.webServer/security/requestFiltering /+fileExtensions.[fileExtension='.txt',allowed='false'] /commit:apphost
    
  4. 使用以下语法将 fileExtensions 集合的 applyToWebDAV 属性设置为 false,以允许 WebDAV 访问所有阻止的文件类型:

    AppCmd set config "Default Web Site/" /section:system.webServer/security/requestFiltering /fileExtensions.applyToWebDAV:false /commit:apphost
    

完成上述步骤后,applicationHost.config 文件的 fileExtensions 部分中的最终代码应如以下示例所示:

<requestFiltering>
   <fileExtensions applyToWebDAV="false">
      <add fileExtension=".txt" allowed="false" />
   </fileExtensions>
</requestFiltering>

注意:

  • 可以使用上述步骤将其他文件扩展名添加到 fileExtensions 集合来阻止对这些文件的访问,也可以通过为 allowed 属性指定 true 来修改语法以允许特定的文件。

  • 可以使用以下语法将 fileExtensions 集合的 allowUnlisted 属性设置为 false,以阻止所有未知的文件扩展名:

    AppCmd set config "Default Web Site/" /section:system.webServer/security/requestFiltering /fileExtensions.allowUnlisted:false /commit:apphost
    

    注意

    设置此选项要求专门添加每个文件扩展名,然后非 WebDAV 请求才能访问该文件扩展名。

  • 可以使用上述步骤,通过为 applyToWebDAV 属性指定 true 来阻止对 WebDAV 请求的访问。

筛选隐藏段

某些文件段(例如“web.config”和“App_code”)会被默认请求筛选 hiddenSegments 集合隐藏。 可以向文件段列表添加其他条目,以便针对 HTTP 请求隐藏它们,并且可以控制该列表是否适用于 WebDAV 请求。 在此示例中,你将使用 AppCmd 对 HTTP 请求隐藏“include”段(即使它通常是可见的),并指定 WebDAV 请求能够访问所有隐藏的文件段。

  1. 使用完全管理权限打开命令提示符,并将目录切换到你的 InetSrv 文件夹:

    cd "%WinDir%\System32\InetSrv"
    
  2. 使用以下语法将特定条目添加到 hiddenSegments 集合中,以阻止对“include”段的访问:

    AppCmd set config "Default Web Site/" /section:system.webServer/security/requestFiltering /+hiddenSegments.[segment='include'] /commit:apphost
    
  3. 使用以下语法将 hiddenSegments 集合的 applyToWebDAV 属性设置为 false,以允许 WebDAV 访问所有阻止的文件类型:

    AppCmd set config "Default Web Site/" /section:system.webServer/security/requestFiltering /hiddenSegments.applyToWebDAV:false /commit:apphost
    

完成上述步骤后,applicationHost.config 文件的 hiddenSegments 部分中的最终代码应如以下示例所示:

<requestFiltering>
   <hiddenSegments applyToWebDAV="false">
      <add segment="include" />
   </hiddenSegments>
</requestFiltering>

注意:

  • 可以使用上述步骤将其他文件段添加到 hiddenSegments 集合以隐藏它们。
  • 可以使用上述步骤,通过为 applyToWebDAV 属性指定 true 来阻止对 WebDAV 请求的访问。

筛选 HTTP 谓词

默认请求筛选 verbs 集合允许所有未列出的 HTTP 谓词,即使某些谓词可能未映射到特定 HTTP 处理程序。 可以通过向此列表添加条目来指定应允许或阻止哪些 HTTP 谓词,并可以控制此列表是否适用于 WebDAV 请求。 在此示例中,你将使用 AppCmd 阻止 HTTP 请求中的“DELETE”和“PUT”谓词,并指定 WebDAV 请求能够使用这些谓词。

  1. 使用完全管理权限打开命令提示符,并将目录切换到你的 InetSrv 文件夹:

    cd "%WinDir%\System32\InetSrv"
    
  2. 通过将特定条目添加到 verbs 集合并使用以下语法为 allowed 属性指定 false,来阻止对“DELETE”谓词的访问:

    AppCmd set config "Default Web Site/" /section:system.webServer/security/requestFiltering /+verbs.[verb='DELETE',allowed='false'] /commit:appHost
    
  3. 通过将另一个特定条目添加到 verbs 集合并使用以下语法为 allowed 属性指定 false,来阻止对“PUT”谓词的访问:

    AppCmd set config "Default Web Site/" /section:system.webServer/security/requestFiltering /+verbs.[verb='PUT',allowed='false'] /commit:appHost
    
  4. 使用以下语法将 verbs 集合的 applyToWebDAV 属性设置为 false,以允许 WebDAV 访问所有 HTTP 谓词:

    AppCmd set config "Default Web Site/" /section:system.webServer/security/requestFiltering /verbs.applyToWebDAV:false /commit:appHost
    

完成上述步骤后,applicationHost.config 文件的 verbs 部分中的最终代码应如以下示例所示:

<requestFiltering>
   <verbs applyToWebDAV="false">
      <add verb="DELETE" allowed="false" />
      <add verb="PUT" allowed="false" />
   </verbs>
</requestFiltering>

注意:

  • 可以使用上述步骤将其他 HTTP 谓词添加到 verbs 集合中来阻止它们,也可以通过为 allowed 属性值指定 true,修改语法来允许特定的谓词。

  • 可以使用以下语法将 verbs 集合的 allowUnlisted 属性设置为 false,以阻止所有未知的 HTTP 谓词:

    AppCmd set config "Default Web Site/" /section:system.webServer/security/requestFiltering /verbs.allowUnlisted:false /commit:appHost
    

    注意

    设置此选项要求专门添加每个 HTTP 谓词,然后非 WebDAV 请求才能访问该文件扩展名。

  • 可以使用上述步骤,通过为 applyToWebDAV 属性指定 true 来阻止对 WebDAV 请求的访问。

总结

本文档介绍了以下概念:

更多信息

有关使用 WebDAV 的更多信息,请参阅以下文章: