我知道 IIS7 允许我使用 web.config xml 文件对每个目录进行配置。我有一个目录,其中包含一些不希望通过 Web 访问的配置文件。禁止对它的读取访问的本地 web.config 文件将是一个不错的解决方案。
要禁止 Web 访问文件,web.config 文件的内容应该是什么?
编辑:我正在尝试将包含以下内容的 web.config 文件放入一个文件中:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<authorization>
<deny users="*" /> <!-- Denies all users -->
</authorization>
</system.web>
</configuration>
但我仍可以直接访问目录中的文件。这有什么问题?我该如何调试发生的情况?
答案1
您使用的是 system.web。在 IIS7 中,您应该改用 system.webServer。这将阻止所有类型的文件,而不仅仅是 ASP.NET 文件。例如,您可以用密码保护 jpg、gif、txt 和所有类型的文件。
它看起来像这样:
<system.webServer>
<security>
<authorization>
<remove users="*" roles="" verbs="" />
<add accessType="Allow" roles="Administrators" />
</authorization>
</security>
</system.webServer>
如果您只想为 1 个文件设置它:
<location path="dontlook.jpg">
<system.webServer>
<security>
<authorization>
<remove users="*" roles="" verbs="" />
<add accessType="Allow" roles="Administrators" />
</authorization>
</security>
</system.webServer>
</location>
答案2
我认为这可以解决您的问题。
将此 web.config 放在包含目标目录的目录中:
<configuration>
<system.webServer>
<security>
<requestFiltering>
<hiddenSegments>
<add segment="target directory name"/>
</hiddenSegments>
</requestFiltering>
</security>
</system.webServer>
</configuration>
答案3
您可以使用 Web.config 上的 Location 节点。以下是有关微软; 简而言之:
<location path="Subdirectory">
<system.web>
<authorization>
<deny users="*"/> <!-- Denies all users -->
</authorization>
</system.web>
</location>
<location path="Public_Directory">
<system.web>
<authorization>
<allow users="*"/> <!-- Allows all users -->
</authorization>
</system.web>
</location>
您还可以使用 ? 通配符来指定是否应(允许/拒绝)匿名用户
答案4
*
表示每个登录的用户。?
指匿名用户。
您必须使用?
。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</configuration>