通过web.config设置拒绝目录中的所有文件

时间:2016-05-06 17:39:06

标签: asp.net security web-config

作为测试,我尝试使用web.config以下列方式控制安全性:

  1. 拒绝访问目录中的所有文件(特定文件除外)
  2. 允许访问目录中的所有文件(特定文件除外)
  3. 所以我按如下方式设置了web.config:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    
      <!-- Deny access to all files in a directory, except for a specific file -->
      <location path="NonAccessibleDirectory">
        <system.web>
            <authorization>
              <deny users="?"/>
              <deny users="*"/>
            </authorization>
        </system.web>
      </location>
    
      <location path="NonAccessibleDirectory/AccessibleFile.html">
        <system.web>
            <authorization>
              <allow users="?"/>
              <allow users="*"/>
            </authorization>
        </system.web>
      </location>
    
      <!-- Allow access to all files in a directory, except for a specific file -->
      <location path="AccessibleDirectory/NonAccessibleFile.html">
        <system.web>
            <authorization>
              <deny users="?"/>
              <deny users="*"/>
            </authorization>
        </system.web>
      </location>
    
      <system.web>
        <compilation debug="true" targetFramework="4.5" />
        <httpRuntime targetFramework="4.5" />
      </system.web>
    
    </configuration>
    

    正如所料:

    • 如果我浏览到不可访问的目录但未指定文件,则会被拒绝访问
    • 如果我浏览到可访问目录但未指定文件,我可以看到文件列表

    我遇到的问题是:

    • 如果我浏览到不可访问的目录并指定一个文件,我可以查看它,我本来希望不被授予访问权限
    • 如果我浏览到可访问目录并指定我拒绝通过web.config访问的文件,我仍然可以查看它,我本来希望不会被授予访问权

    艾米我配错了吗?

1 个答案:

答案 0 :(得分:9)

您可能正在尝试 ASP.NET URL授权 IIS URL授权之间的区别。关于此的详细摘要位于http://www.iis.net/learn/manage/configuring-security/understanding-iis-url-authorization#Differences

简而言之,ASP.NET默认情况下使用web.config会发生的情况是,它只将 allow 拒绝规则应用于托管处理程序处理的文件。< / p>

.txt和.html文件等文件由IIS而不是ASP.NET处理,因此授权规则不适用于它们。

您可以通过将其添加到主web.config来测试它,以使用IIS版本。

EdgeS &

我使用相同的安全性和相同的目录和文件对此进行了测试,并且所有内容似乎都正常工作

如果您使用其他身份验证方法(如表单),则可以使用更完整的版本

<system.webServer>
    <modules>
        <remove name="UrlAuthorization" />
        <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule"  />
    </modules>
</system.webServer>