Web 服务器目录索引

Article

July 5, 2022

当 HTTP 客户端(通常是 Web 浏览器)请求指向目录结构而不是目录结构中的实际网页的 URL 时,Web 服务器通常会提供默认页面,通常称为主页面或“索引”页面。 此类页面的常见文件名是 index.html,但大多数现代 HTTP 服务器都提供了可配置的文件名列表,服务器可以将其用作索引。如果服务器配置为支持服务器端脚本,列表通常会包含允许将动态内容用作索引页面的条目(例如 index.cgi、index.pl、index.php、index.shtml、index.jsp、 default.asp),即使仍然指定 HTML 输出(index.html.php 或 index.html.aspx)可能更合适,因为这不应被视为理所当然。一个例子是流行的开源 Web 服务器 Apache,其中文件名列表由主服务器配置文件或该目录的配置文件中的 DirectoryIndex 指令控制。可以完全不使用文件扩展名,对内容交付方式保持中立,并将服务器设置为通过内容协商自动选择最佳文件。 如果服务器无法找到其配置中列出的任何名称的文件,它可能会返回错误(通常是 403 Index Listing Forbidden 或 404 Not Found)或生成自己的索引页面列出目录中的文件。通常这个选项,通常命名为 autoindex,也是可配置的。

历史

早在 NCSA HTTPd 0.3beta(1993 年 4 月 22 日)就支持 Web 服务器基于每个子目录提供默认文件的方案,该方案默认提供目录中的 index.html 文件。 CERN HTTPd 至少从 2.17beta(1994 年 4 月 5 日)开始采用此方案,除了 NCSA 起源的 index.html 之外,其默认支持 Welcome.html 和 welcome.html。后来的 Web 服务器通常支持此默认文件方案以一种或另一种形式;这通常是可配置的,index.html 是默认文件名之一。

实施

在某些情况下,网站的主页可以是使用地理定位的大型网站的语言选项菜单。也可以避免这个步骤,例如,通过使用内容协商。 在给定目录中不存在已知 index.* 文件的情况下,可以将 Web 服务器配置为提供目录中自动生成的文件列表。例如,对于 Apache Web 服务器,此行为由 mod_autoindex 模块提供,并由 Web 服务器配置文件中的 Options +Indexes 指令控制。这些自动目录列表有时会带来安全风险,因为它们在称为目录索引攻击的过程中枚举了可能不打算供公众访问的敏感文件。这种安全配置错误也可能有助于其他攻击,例如路径或目录遍历攻击。

表演

访问目录时,各种可用的索引方法也可能对操作系统资源(RAM、CPU 时间等)的使用产生不同的影响,从而对 Web 服务器性能产生不同的影响。 从最快到最慢的方法,这里是列表: 使用静态索引文件,例如:index.html等; 使用通常称为自动索引的 Web 服务器功能(当不存在索引文件时)让 Web 服务器使用其内部模块自动生成目录列表; 使用 Web 服务器内部程序解释器读取的解释文件,例如:index.php; 使用 CGI 可执行程序和编译程序,例如:index.cgi。

参考文献