【发布时间】: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