【问题标题】:IIS 6 ignores Web.config authorization settingsIIS 6 忽略 Web.config 授权设置
【发布时间】:2009-11-25 16:27:39
【问题描述】:

上下文:

  • Windows 2003 Server 上的 IIS 6
  • ASP.NET 3.5 sp1
  • 从虚拟目录运行的 C# Web 应用程序

我不想提供一些文件。例如,根目录中有一个hibernate.cfg.xml,它应该是不可访问的。在日志目录中也有日志文件。在本地开发服务器 (Visual Studio 2008) 上,NHibernate 配置文件可以通过 Web.config 以多种方式进行保护:

<location path="hibernate.cfg.xml">
    <system.web>
      <authorization>
        <deny users="?"/>
        <deny users="*"/>
      </authorization>
    </system.web>
</location>

<httpHandlers>
...
    <add path="*.cfg.xml" verb="*" type="System.Web.HttpForbiddenHandler" />
</httpHandlers>

可以通过另一个Web.config文件保护不同目录中的日志:

<?xml version="1.0"?>
<configuration>
  <system.web>
    <authorization>
      <deny users="*"/>
    </authorization>
  </system.web>
</configuration>

当应用程序使用 aspnet_compiler.exe 编译并部署到 IIS 6 服务器时,这些都不起作用。日志中没有错误。任何人都可以阅读这些文件。该应用程序是使用 MSBuild 编译和安装的,如下所示:

<AspNetCompiler Force="true" Debug="true" PhysicalPath="$(DeploymentTempPath)\$(DeploymentAppName)" TargetPath="$(DeploymentPath)\$(DeploymentAppName)" VirtualPath="/$(DeploymentAppName)" />

如何让 IIS 6 尊重 Web.config 中的授权规则。

注意:假设我不能将这些文件移到部署目录之外。

【问题讨论】:

    标签: asp.net security iis iis-6


    【解决方案1】:

    看起来 IIS 没有将 .xml 或 .txt 文件的请求转发到 ASP.NET,因此它没有机会应用其授权控制。

    要解决这个问题,我必须执行以下操作(来自 this forum post):

    1. 从 IIS 控制台,打开我的应用程序虚拟目录的属性。
    2. 虚拟目录 > 配置
    3. 使用 ASP.NET 过滤器为扩展“.xml”添加新的处理程序(在我的例子中为c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll
    4. 所有动词。取消选中“脚本引擎”和“验证该文件是否存在”。

    有没有办法在Web.config 中做到这一点?

    【讨论】:

      【解决方案2】:

      试试这个:

      <location path="hibernate.cfg.xml">
          <system.web>
            <authorization>
              <deny users="?"/>
              <deny users="*"/>
            </authorization>
          </system.web>
      </location>
      

      【讨论】:

      • 感谢您的快速回答,但不幸的是,这不起作用。 IIUC,deny users="?" 只是确保不允许匿名用户访问该资源。但在我应用此更改之前,经过身份验证的用户可以访问该文件,即使应该通过 deny users="*" 处理这种情况。
      【解决方案3】:

      .jpg.xml.pdf 等静态文件默认由内核模式http.sys 驱动程序直接处理。除非您已将这些扩展映射到 ASP.NET,否则它们将永远不会影响 ASP.NET 管道,因此也不会影响 ASP.NET 中的授权机制。

      【讨论】:

        【解决方案4】:

        要在 .NET 2.0/3.5/4.0 和 IIS6 上强制 .NET 处理 .xml 等静态文件,请执行以下操作:

        1) 如上所述(IIS6 网站属性、主目录、配置)将 .xml(或其他文件类型)的条目添加到 IIS 中

        2) 在 web.config 中添加受限目录或文件的位置

        <location path="directory_or_file_name">
            <system.web>
              <authorization>
                <deny users="?"/>
              </authorization>
            </system.web>
        </location>
        

        3) 将以下内容添加到 httpHandlers 部分:

        <add path="*.xml" verb="*" type="System.Web.StaticFileHandler" validate="true" />
        

        这将强制 .NET 仅将 &lt;location&gt; 标记中指定的 .xml 文件提供给经过身份验证的用户。

        【讨论】:

          【解决方案5】:

          URL 授权: URLAuthorizationModule 类是 负责 URL 授权 Windows 2003。此机制使用 用于存储用户详细信息的 URL 命名空间 和访问角色。网址 授权可用于 随时。您存储授权 特殊 XML 文件中的信息 目录。该文件包含标签 允许或拒绝访问目录 对于特定的用户或组。除非 指定,标签也适用于 子目录。

          您需要执行以下操作:

          <deny users="?"/>
          <deny users="*"/>
          

          通配符条目“?”表示其他人将无法访问此目录。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-10-12
            • 2012-10-06
            • 2011-02-05
            • 2019-03-17
            • 2013-03-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多