【问题标题】:Authorization settings for a folder in ASP.NETASP.NET 中文件夹的授权设置
【发布时间】:2011-03-23 11:26:55
【问题描述】:

我有一个 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

有什么想法吗?

谢谢。

【问题讨论】:

    标签: asp.net web-config authorization


    【解决方案1】:

    .txt 默认情况下,ASP.NET 不处理文件。您必须阻止从 IIS 中访问该文件夹。

    如果您使用的是 IIS 7,则可以使用 Request Filtering 来实现此目的。

    【讨论】:

    • 或者将.txt添加到处理的文件列表中。
    【解决方案2】:

    为了避免这种混淆,我通常在需要设置不同权限的目录中创建一个 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>
    

    【讨论】:

      【解决方案3】:

      我输入了一个摘要,因为许多人在子文件夹身份验证方面面临同样的情况。

      子文件夹授权

      • ASP.NET 只能有一个 身份验证模式为一个 应用。
      • 不同的 应用程序不能共享资源 其中。

      场景

      假设主页不应该提示登录对话框。它应该让用户在没有任何登录的情况下通过。但是,在同一个应用程序中,可能在不同的文件夹中,另一个页面需要使用用户网络登录 ID 来检查用户对数据库表的权限。默认情况下,IE 将所有只有主机名的网站视为 Intranet。根据其默认的 Intranet 设置,如果使用 Windows 身份验证,它将不会提示登录对话框并将用户登录名和密码传递给应用程序。但是,棘手的是,如果应用程序有一个实际的域,IE 会认为它是一个 Internet 站点,如果使用 Windows 身份验证,它会提示登录名和密码。


      不提示使用 Windows 身份验证的 Internet 站点的登录对话框的唯一方法是同时在 IIS 中打开匿名身份验证。但是,您将无法捕获登录信息,因为匿名优先于 Windows 身份验证。好消息是有办法解决这个问题。如果应用程序子文件夹需要捕获登录信息,则需要覆盖 web.config 中 Location 元素中的父授权。

      1 在 IIS 中,配置 Authentication 如下:

      1. 启用匿名身份验证,
      2. 启用 Windows 身份验证

      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>
      

      【讨论】:

        猜你喜欢
        • 2012-10-06
        • 1970-01-01
        • 2015-04-10
        • 1970-01-01
        • 1970-01-01
        • 2012-10-04
        • 2014-09-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多