ASP.NET中的应用程序文件夹用于存储对运行网站至关重要的各种元素。我想更深入地了解这些文件夹,特别是文件夹可访问性。根据{{3}}上的文章:
应用程序文件夹的内容, 除了App_Themes文件夹,是 没有响应Web 请求,但可以从中访问 应用程序代码。
对这些文件夹的任何浏览器请求都会导致“404 - 找不到页面”。
那么是什么阻止了App_Code
,App_Data
,App_WebReferences
,bin
等文件夹被提供给用户?它是一个IIS硬编码“不提供此文件夹吗?”它是权限配置吗?无论如何有意/无意地绕过这个?
答案 0 :(得分:3)
在我的IIS7.5配置上,在C:\ Windows \ System32 \ inetsrv \ config \ applicationHost.config中找到了这一部分:
<hiddenSegments applyToWebDAV="true">
<add segment="web.config" />
<add segment="bin" />
<add segment="App_code" />
<add segment="App_GlobalResources" />
<add segment="App_LocalResources" />
<add segment="App_WebReferences" />
<add segment="App_Data" />
<add segment="App_Browsers" />
</hiddenSegments>
答案 1 :(得分:1)
在Windows Server 2008上的IIS7中,ASP.NET更紧密地集成到整个处理管道中,所以我想在IIS7中,ASP.NET很容易说“不,我不会触摸那个。“
在IIS6中,IIS本身对IIS的了解很少,而是通过ISAPI配置来控制它。
在IIS6 IIS管理器中,右键单击一个网站,获取“属性”,转到“主目录”选项卡,然后单击右下角的“配置”。这显示了ISAPI应用程序扩展以及为每个扩展做了什么。
对于所有ASP.NET扩展(aspx,ascx,config,浏览器,大量其他),它指定由C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_isapi.dll <完成的处理/ p>
然后,ASP.NET系统为C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ CONFIG <中的全局machine.config和/或web.config文件中定义的每种文件类型注册了处理程序。 / p>
例如,在全局web.config文件中,在httpHandlers元素下:
<add path="*.ascx" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
因此,不仅仅是这些特殊文件夹,还有许多类型的文件,还有许多不允许浏览的保留文件。
答案 2 :(得分:0)
.net框架本身拦截对这些文件夹的请求(以及您应该允许浏览的一堆其他文件类型)并将404返回给IIS,然后将其作为“404 - Page传递回浏览器”找不到“。
因此,它不会发生在权限级别,甚至是IIS级别。它位于框架内 - 可能位于全局web.config中的一个HttpHandler中。
如果您查看,可以看到大量明确配置为不提供的文件扩展名。据推测,您可以调整设置并使其作为xml提供web.config文件(这与通常表示不提供此文件类型的行为不同)。
值得注意的是,我没有特别看到全局web.config文件中提到的任何特殊文件夹(app_code等)。也许它是在其他HttpHandler中处理的 - 例如,.aspx的处理程序可能包含一些代码,阻止提供位于特殊文件夹中的.aspx文件等。