上下文:
我想不提供一些文件。例如,根目录中有一个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中的授权规则。
注意:假设我无法将这些文件移到部署目录之外。
答案 0 :(得分:6)
看起来IIS不会将.xml或.txt文件的请求转发给ASP.NET,因此它无法应用其授权控件。
要解决这个问题,我必须执行以下操作(来自this forum post):
c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll
)为扩展名“.xml”添加新的处理程序有没有办法在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="*"/>
外卡条目“?”意味着没有其他人可以访问此目录。