IIS 6忽略Web.config授权设置

tro*_*tro 2 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>
Run Code Online (Sandbox Code Playgroud)

要么

<httpHandlers>
...
    <add path="*.cfg.xml" verb="*" type="System.Web.HttpForbiddenHandler" />
</httpHandlers>
Run Code Online (Sandbox Code Playgroud)

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

<?xml version="1.0"?>
<configuration>
  <system.web>
    <authorization>
      <deny users="*"/>
    </authorization>
  </system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)

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

<AspNetCompiler Force="true" Debug="true" PhysicalPath="$(DeploymentTempPath)\$(DeploymentAppName)" TargetPath="$(DeploymentPath)\$(DeploymentAppName)" VirtualPath="/$(DeploymentAppName)" />
Run Code Online (Sandbox Code Playgroud)

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

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

tro*_*tro 6

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

要解决这个问题,我必须执行以下操作(来自此论坛帖子):

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

有没有办法从内部做到这一点Web.config