在本地计算机上,我在 mvc4(razor)上创建了示例项目,并创建名为“x”的目录,并在其中放置了一个文本文件“a.txt”。
http://localhost:64471/x/a.txt
在我的网络配置中,我拒绝所有用户通过此配置访问“x”文件夹:
<location path="x">
<system.web>
<authorization>
<deny users="*"/>
</authorization>
</system.web>
现在如果用户发送此请求:
http://localhost:64471/x/
它可以工作并将用户返回到 Web 配置中表单标签中定义的 URL。
但是当用户发送此请求时:
http://localhost:64471/x/a.txt
可以在浏览器中读取文本文件(浏览器显示文本文件的内容)。
我想知道如何拒绝用户访问“x”文件夹中的所有文件和子文件夹?
我知道这是一个老问题,但如果您在处理文本或 html 文件时遇到问题,您可能需要参考 this stackoverflow 问题。
简而言之,您可能需要将其添加到您的 web.config 中:
<system.webServer>
<modules>
<remove name="UrlAuthorization" />
<add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" />
</modules>
</system.webServer>
正如 kirk 指出的那样,.txt 和 .html 文件等文件由 IIS 而不是 ASP.NET 处理,因此授权规则不适用于它们。
我在根 web.config 中使用
path="x"
进行了测试。它限制 x 文件夹下的所有内容;它甚至不允许我浏览 ~/x.我被重定向到登录页面。
您可以在根 web.config 中尝试像这样的 a.txt 的完整路径吗?
<location path="x/a.txt">
<system.web>
<authorization>
<deny users="*"/>
</authorization>
</system.web>
</location>
如果仍然不起作用,您可以尝试在 x 文件夹中创建一个包含以下内容的 web.config。
<?xml version="1.0"?>
<configuration>
<location path="a.txt">
<system.web>
<authorization>
<deny users="*"/>
</authorization>
</system.web>
</location>
</configuration>
仅添加我的解决方案,我将Views文件夹的web.config复制到我要阻止的文件夹中,我测试了一下,所有文件和子目录的文件都被阻止了,我使用的web.config配置是这样的:
<?xml version="1.0"?>
<configuration>
<system.webServer>
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
</system.webServer>
</configuration>