【问题标题】:Understanding the ASP.NET application folders了解 ASP.NET 应用程序文件夹
【发布时间】:2009-08-18 14:53:31
【问题描述】:

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

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

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

那么是什么阻止了App_CodeApp_DataApp_WebReferencesbin 等文件夹被提供给用户呢?是 IIS 硬编码 “不提供此文件夹吗?” 是权限配置吗?无论如何,是否可以有意/无意地规避这一点?

【问题讨论】:

    标签: asp.net security iis frameworks


    【解决方案1】:

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

    【讨论】:

    • 好发现!我运行 IIS6,所以我四处寻找,applicationHost.config 不存在。 IIS6 元数据库位于:_systemroot_\System32\Inetsr\MetaBase.xml;不幸的是没有 hiddenSegments 元素。
    【解决方案2】:

    在 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 完成的处理

    然后,ASP.NET 系统为在 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG 中的全局 machine.config 和/或 web.config 文件中定义的每种文件类型注册了处理程序

    例如,在全局 web.config 文件中,在 httpHandlers 元素下:

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

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

    【讨论】:

      【解决方案3】:

      .net 框架本身会拦截对这些文件夹的请求(以及应允许您浏览的一堆其他文件类型)并向 IIS 返回 404,然后将其作为“404 - Page”传递回浏览器未找到”。

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

      如果您在那里查看,您会看到大量明确配置为不提供服务的文件扩展名。大概您可以调整设置并使其以 xml 的形式提供 web.config 文件(这与说不提供此文件类型的通常行为不同)。

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

      【讨论】:

        猜你喜欢
        • 2011-01-28
        • 1970-01-01
        • 2016-12-31
        • 2013-08-06
        • 2011-03-26
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多