IIS7:如何使用web.config文件阻止访问?


14

我知道IIS7允许我使用web.config xml文件进行每个目录配置。我有一个目录,其中包含一些不想通过Web访问的配置文件。本地的web.config文件禁止对其进行读取访问,这将是一个不错的解决方案。

web.config文件的内容应该是什么,以禁止通过Web访问这些文件?

编辑:我正在尝试将包含以下内容的web.config文件放入文件中:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
            <system.web>
                    <authorization>
                            <deny users="*" /> <!-- Denies all users -->
                    </authorization>
            </system.web>
</configuration>

但是我仍然可以直接访问目录中的文件。它出什么问题了?如何调试正在发生的事情?

Answers:


12

您正在使用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>

一年后,我遇到了自己的答案,想补充一点说明。您必须确保同时启用了表单或Windows身份验证,否则仅删除规则会有所帮助。如果启用了Windows身份验证,则系统将提示您输入凭据。
Scott Forsyth-MVP

+1最后!花了3个小时找到了这个!谢谢
hofnarwillie 2014年

5

我认为这可以解决您的问题。
将此web.config放置在包含目标目录的目录中:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering>
    <hiddenSegments>
     <add segment="target directory name"/>
    </hiddenSegments>
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>

2
您能否在提交答案作为答案之前进行验证。
James A Mohler 2012年

这对我有用。另外,请注意,您可以将文件名作为段。
Soenhay

4

您可以使用Web.config上的“位置”节点。这是有关msdn的详细说明;简而言之:

<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>

您还可以使用?通配符,指定您应该(允许/拒绝)匿名用户


该文件如何阻止对当前目录的访问,但允许对“ css”目录的访问?它缺少周围的<configuration>标记。
内夫斯

您的允许仅允许通过身份验证的用户。如果您需要未经身份验证的用户,则应包括allow users =“?” 也一样
日产迷

0
  • * 表示每个登录用户。
  • ? 表示匿名用户。

您必须使用?

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.web>
        <authorization>
            <deny users="?" /> 
        </authorization>
    </system.web>
</configuration>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.