如何让IIS7停止提供文件夹服务?

17

我知道默认情况下,IIS不会向公众提供App_Data或bin文件夹中的内容。
如何设置一个以上的文件夹不向公众提供服务?

3个回答

33

正确的做法是使用这个:

<configuration>
   <system.webServer>
       <security>
          <requestFiltering>
               <hiddenSegments>
                   <add segment="My_Directory" />
               </hiddenSegments>
           </requestFiltering>
       </security>
   </system.webServer>
</configuration>

这样可以让您仍然可以从 IUSR 帐户访问那里的文件,但阻止直接填充文件请求。

请注意,这将阻止该目录中以及任何子目录中的文件,无论该目录出现在哪个位置 - 即使它本身是其他东西的子目录。


1
以上代码应放置在与您想要拒绝访问的目录相同的目录中的web.config文件中。我尝试将其放在根级别的web.config中,它会阻止对整个站点的访问。将其放在同一目录中的单独web.config文件中,在尝试访问该目录时返回404错误(虽然我确定它返回的错误类型可以在IIS中更改)。 - Tiffany
大多数情况下很明显,但是... "My_Directory" 不是字面意思,应该是您的目录名称! - Chris O

3
正如仅提供链接的答案所指出的,hiddenSegments 是解决问题的正确工具。进入 IIS 然后进入 site,在 Features 中找到 Request Filtering (必须在 Server Manager 中安装),现在添加您想要防止访问的目录名称,或者 URL 的任何部分。这种方法需要在站点中使用唯一的 URL 或目录名称,否则 URL 中的任何级别中发生的该段的其他出现都将导致该请求被阻止:

http://www.iis.net/configreference/system.webserver/security/requestfiltering/hiddensegments


1

从该文件夹中删除IIS_IUSR权限。

我认为它通常在“Internet Guest Account”下面。


5
如果你这样做,可能会完全阻止通过网络应用程序访问这些文件的能力,这可能不是预期的结果。 - Andrew Barber
删除IIS_IUSR在我的情况下有效,我想保存这些用户上传的内容,现在我将它们保存在网站文件夹之外的c:驱动器上,而且这个上传文件夹没有IIS_IUSR权限,但我仍然可以从我的网站代码中访问它。 - Amr Elgarhy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接