IIS 6忽略Web.config授权设置

时间:2009-11-25 16:27:39

标签: asp.net security iis iis-6

上下文:

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

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

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

OR

<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中的授权规则。

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

5 个答案:

答案 0 :(得分:6)

看起来IIS不会将.xml或.txt文件的请求转发给ASP.NET,因此它无法应用其授权控件。

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

  1. 从IIS控制台,打开我的应用程序虚拟目录的属性。
  2. 虚拟目录&gt;构造
  3. 使用ASP.NET过滤器(在我的情况下为c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll)为扩展名“.xml”添加新的处理程序
  4. 所有动词。取消选中“脚本引擎”和“验证文件是否存在”。
  5. 有没有办法在Web.config内执行此操作?

答案 1 :(得分:2)

试试这个:

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

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

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

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仅将<location>标记中指定的.xml文件提供给经过身份验证的用户。

答案 4 :(得分:0)

  

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

您需要执行以下操作:

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

外卡条目“?”意味着没有其他人可以访问此目录。