ASP.NET Lab

The Best Web, The Best Future

博客园 首页 新随笔 订阅 管理

当服务器接收到特定资源的请求时,ASP.NET 为被请求 URL 使用虚拟目录路径中的所有配置文件计算出资源的层次配置,并且大部分局部配置都会对父配置文件中的配置进行覆盖。

配置情节一

比如,开发者可能拥有如下物理文件结构的 Web 站点,并且 Application Root 是应用程序虚拟目录。

配置情节示例目录

通常,未尾的配置会覆盖掉父目录中的相同配置段。但这种情况下的集合元素并不会被覆盖,它们会被添加到集合中。

提示:自定义配置段处理器可以实现不同的继承结构。

假设 SubDir1 中有一个 Web.config 文件,而 Application Root 或 SubDir2 中没有。在这种情况下,ASP.NET 会使用三个配置文件计算 SubDir1 配置。级别最高的是位于 %systemroot%\Microsoft .NET\Framework\版本号\CONFIG 目录下的 Machine.config 文件,它属于机器级别。运行在特定版本 .NET Framework 下的所有 .NET Framework 应用程序都继承该文件中的配置。下一个级别的文件是根 Web.config 文件,与 Machine.config 位于同一目录。所有运行在特定版本 .NET Framework 下的所有 ASP.NET 应用程序都继承它的配置。第三个配置文件就是局部 Web.config 文件,它位于 SubDir1 下。

假设 SubDir1 中的 Web.config 文件包含有 enabled 参数值为 trueanonymouseIdentification 元素。注意:enabled 参数的默认值是 false,该值是固有的,并不被任何根配置文件指定。没有使用配置文件的 Application Root 或 SubDir2 就会更改 anonymouseIdentification 元素的配置,从而匿名用户无法对这些目录中的 ASP.NET 资源进行访问。但是,匿名用户仍然可以访问 SubDir1 目录中的 ASP.NET 资源。

安全提示:ASP.NET 配置系统只应用于 ASP.NET 资源,并且由 ASP.NET 使用 Aspnet_isapi.dll 来处理这些已注册资源。默认时,配置系统不提供对非 ASP.NET 资源(如 ASP、HTML、TXT、GIF、和 JPEG 文件等)的支持,这些非 ASP.NET 资源可以被所有用户访问。在前面的例子中,如果启用目录浏览并没有其他适当的限制,所有用户都可以查看到应用程序根目录、SubDir1、以及 SubDir2 目录中的任何非 ASP.NET 文件。

配置情节二

下例所示的是把应用程序虚拟目录映射成应用程序根目录(MyAppRootDir)的 Web 站点文件结构。

MyAppRootDir
    SubDir1
        SubDir1A
    SubDir2

除非已经描述相关条件,否则任何目录中的配置都会对父目录的配置进行覆盖。比如,可以配置应用程序以允许用户访问 MyAppRootDir 和 SubDir2 中的 ASP.NET 资源,但是只允许被选用户访问 SubDir1 和 SubDir1A 中的 ASP.NET 资源。具体步骤如下:

  1. 离开 MyAppRootDir。MyAppRootDir 中的 ASP.NET 资源会自动从 Machine.config 文件中继承默认配置,以允许匿名用户的访问。同时,MyAppRootDir 和三个子目录也同样会继承到这个授权配置。

  2. 把 Web.config 文件存放到只允许被选用户访问的 SubDir1 下,就会覆盖掉 Machine.config 文件中允许匿名用户访问的配置,并且也作用于子目录 SubDir1A。因为 SubDir2 与 SubDir1 属同一级别,所以它不继承 SubDir1 的授权配置。

所有 ASP.NET 应用程序都会继承根 Web.config 文件的默认配置。该文件安全配置段的默认配置允许所有用户访问任何 URL 资源。本例的应用程序根目录中并没有用于更改安全配置的配置文件,所以所有用户可以访问其中的任何 ASP.NET 资源(因为继承了机器级别配置文件 Machine.config 中的默认配置)。如果 SubDir1 中的 Web.config 文件包含有安全配置段,并且配置为只允许特定用户的访问,那么子目录 SubDir1A 将会继承该配置。因此,所有用户都可以在应用程序根目录或 SubDir2 中访问 ASP.NET 资源,但只有被选用户才可以访问 SubDir1 和 SubDir1A 中的 ASP.NET 资源。

配置情节三

针对虚拟目录的配置,可以为目录指定友好名称以简化依赖于物理目录结构的访问路径并隐藏真实的目录名。因此,请谨慎组织虚拟目录的结构以避免出现配置问题。比如,开发者可能需要使用虚拟目录来获取下列物理目录结构中名为 MyResource.aspx 的 ASP.NET 页面。

MyDir
    SubDir1 (mapped from VDir1)
        SubDir1A (mapped from VDir1A)
            MyResource.aspx
    SubDir2

在这个例子中,SubDir1 和 SubDir1A 都拥有各自的 Web.config 文件。如果某个客户端使用 http://localhost/vdir1/subdir1A/MyResource.aspx 访问 c:\Subdir1\Subdir1A\MyResource.aspx 时,该资源会继承 Vdir1 的配置。但是,如果客户端使用 http://localhost/vdir1A/MyResource.aspx 访问相同的资源时,情况就不一样了,它并没有继承 Vdir1 的配置。因此,不推荐使用这样的方式来创建虚拟目录,因为会引发不可意料的结果甚至会造成应用程序的错误。

Internet Information Services(IIS)是用于以 Web 方式发布资源的 Web 服务器。ASP.NET 配置系统只应用于 ASP.NET 资源,并且由 ASP.NET 使用 Aspnet_isapi.dll 来处理这些已注册资源。默认时,配置系统不为非 ASP.NET 资源提供安全支持。比如,ASP、HTML、TXT、GIF、以及 JPEG 文件可以被所有用户访问。在前面的例子中,如果启用目录浏览并没有其他适当的限制,所有用户都可以查看到应用程序根目录、SubDir1、以及 SubDir2 目录中的任何非 ASP.NET 文件。

posted on 2006-12-15 22:03  Laeb  阅读(232)  评论(0编辑  收藏  举报