我有一个asp.net网站,我想限制所有用户访问名为“log”的文件夹,我在web.config中有这个元素:
<location path="log">
<system.web>
<authorization>
<deny users="*"/>
</authorization>
</system.web>
</location>
和system.web中的这个元素:
<authorization>
<allow users="*"/>
</authorization>
但我仍然可以访问此网址:http://www.mydomain.com/log/log.txt
有什么想法吗?
感谢。
答案 0 :(得分:2)
.txt
个文件。您必须阻止从IIS中访问该文件夹。
如果您使用的是IIS 7,则可以使用Request Filtering来实现此目的。
答案 1 :(得分:0)
为了避免这种混淆,我通常会在需要设置不同权限的目录中创建一个web.config文件。
如果您将web.config文件放在日志文件夹中,它将正常工作(并且检查文件夹中的应用权限将变得更加容易)
示例:
<?xml version="1.0"?>
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<system.web>
<authorization>
<deny users="*"/>
</authorization>
</system.web>
</configuration>
答案 2 :(得分:0)
我输入了一个摘要,因为很多人都遇到了与子文件夹身份验证相同的情况。
子文件夹授权
方案
假设主页不应该提示登录对话框。它应该让用户无需登录即可通过。但是,在相同的应用程序中,可能在另一个文件夹中,另一个页面需要使用用户网络登录ID来检查用户对数据库表的许可。默认情况下,IE会将所有网站仅用主机名称为Intranet。通过默认的Intranet设置,如果使用Windows身份验证,它将不会提示登录对话框并将用户登录名和密码传递给应用程序。但是,棘手的一方是,如果应用程序有一个实际域,IE会认为它是一个Internet站点,如果使用Windows身份验证,它将提示登录和密码。
不使用Windows身份验证为Internet站点提供登录对话框的唯一方法是在IIS中打开匿名身份验证。但是,您将失去捕获登录信息的能力,因为匿名优先于Windows身份验证。好消息是有一种方法可以解决这个问题。如果应用程序子文件夹需要捕获登录信息,则需要覆盖web.config中Location元素中的父授权。
1在IIS中,按如下方式配置身份验证:
2在Web.Config中添加以下内容。
<authentication mode="Windows" />
<authorization>
<allow users="*" />
</authorization>
<!-- secured is the relative subfolder name. deny anonymous user, so only the authenticated login will pass through -->
<location path="secured" allowOverride="true">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>