代码之家  ›  专栏  ›  技术社区  ›  Gavin Miller

了解ASP.NET应用程序文件夹

  •  4
  • Gavin Miller  · 技术社区  · 16 年前

    ASP.NET中的应用程序文件夹用于存储运行网站所必需的各种元素。我想更深入地了解这些文件夹,特别是文件夹的可访问性。根据关于 ASP.NET Web Site Layout :

    应用程序文件夹的内容, 除了应用程序主题文件夹,是 未响应Web提供服务 请求,但可以从 应用程序代码。

    对这些文件夹的任何浏览器请求都会导致“404-找不到页面”。

    那么是什么阻止了像 App_Code , App_Data , App_WebReferences , bin 等等,从服务到用户?它是一个IIS硬编码吗 “不提供此文件夹?” 它是权限配置吗?不管怎样,有没有故意/不知情地规避这一点?

    3 回复  |  直到 16 年前
        1
  •  3
  •   Eddie Groves    16 年前

    在我的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>
    

    See also IIS Documentation.

        2
  •  1
  •   Gavin Miller    16 年前

    在WindowsServer2008的iis7中,ASP.NET更紧密地集成到整个处理管道中,所以我可以想象在iis7中,ASP.NET很容易说“不,我不会碰那个”。

    在iis6中,IIS本身对IIS的直接了解很少,相反,它都是通过isapi配置控制的。

    在iis6 IIS管理器中,右键单击网站,获取属性,转到主目录选项卡,然后单击右下角的配置。这显示了ISAPI应用程序扩展以及为每个扩展所做的工作。

    对于所有ASP.NET扩展(aspx、ascx、config、browser和许多其他扩展),它指定由C:\windows\microsoft.net\framework\v2.0.50727\asp net\u isapi.dll执行的处理。

    然后,ASP.NET系统为全局machine.config和/或web.config文件中定义的每个文件类型注册了处理程序,这些文件类型位于c:\windows\microsoft.net\framework\v2.0.50727\config

    例如,在global web.config文件的httphandlers元素下:

    <add path="*.ascx" verb="*" type="System.Web.HttpForbiddenHandler" validate="true"/>
    

    所以不允许浏览的不仅仅是这些特殊的文件夹,还有许多类型的文件,还有许多类型的保留文件。

        3
  •  0
  •   Brian MacKay    16 年前

    .NET框架本身会截取对这些文件夹的请求(以及一系列其他应该允许您浏览的文件类型),并将404返回给IIS,然后将其作为“404-找不到页面”传回浏览器。

    所以它不会发生在权限级别,甚至是IIS级别。它在框架内——可能在global web.config中的一个httphandler中。

    如果您查看其中,可以看到大量的文件扩展名被显式配置为不提供服务。假设您可以调整设置并使其以XML的形式提供web.config文件(这不同于通常所说的不提供此文件类型的行为)。

    值得注意的是,我没有特别看到在global web.config文件中提到的任何特殊文件夹(app_code等)。也许它是在其他httphandlers中处理的——例如,.aspx的处理程序可能包含一些代码,这些代码会阻止服务特殊文件夹中的.aspx文件,等等。