首页/安全/漏洞与攻击面速查/目录浏览(Directory Listing)关闭
Web 漏洞原理与防护55 条

目录浏览(Directory Listing)关闭

Web 服务器可能默认开启目录列表,泄露文件结构、备份与未链接资源;上线应按目录关闭 autoindex(Nginx)或 Options -Indexes(Apache),静态资源目录做最小化控制。

漏洞与攻击面速查安全更新于 2026-10-13

目录浏览为什么会出问题

Web 服务器可能默认开启目录列表:当请求的路径下没有默认首页时,服务器会把目录内文件名逐条列出来。这会泄露文件结构、备份文件、未链接但可访问的资源,甚至让人直接下载到不该公开的文档。上线前应按目录确认关闭,静态资源目录尤其要做最小化控制。

基本信息

Nginx 控制项autoindex off
Apache 控制项Options -Indexes
IIS 控制项目录浏览功能关闭
检查方式请求以斜杠结尾的目录地址,确认返回 403 或 404
适用范围静态站、反代站、上传目录、备份目录

典型使用场景

  • 新站上线:确认静态资源目录没有开启目录索引
  • 反代站点:location 块内显式关闭,避免继承意外默认值
  • 上传目录:用户上传目录禁止列目录,同时禁止脚本执行
  • 备份与临时目录:确认不在 Web 根目录内,或至少不可列目录
  • 例行巡检:请求目录地址并核对响应码,纳入上线检查清单

Nginx 关闭目录列表

Nginx 关闭目录列表
location /static/ {
    autoindex off;          # 关闭目录索引
    add_header X-Content-Type-Options nosniff always;
}
location /uploads/ {
    autoindex off;
    location ~ \.(php|jsp|asp)$ { deny all; }   # 上传目录禁止脚本执行
}

Apache 关闭目录列表

Apache 关闭目录列表
<Directory /var/www/html>
    Options -Indexes            # 关闭目录索引
    AllowOverride None
</Directory>
# 全局兜底:Options -Indexes -FollowSymLinks 按需选择

服务器与控制项

服务器控制项验证方式
Nginxautoindex offcurl 目录地址应返回 403/404
ApacheOptions -Indexes请求目录应返回 403
IIS目录浏览功能功能视图中确认已关闭
对象存储列表权限匿名列举应被拒绝
上线检查时直接请求目录 URL(以斜杠结尾),确认返回 403 或 404 而不是索引页;只检查根目录不够,各子目录与 location 块都要覆盖。
对象存储的桶列表权限常被忽略:桶策略允许匿名列举时,效果与开启目录浏览相同,甚至更严重,因为会直接列出全部对象名。
返回 403 与返回 404 传递的信息并不相同:403 说明目录存在但被拒绝访问,404 则连存在性都隐藏了;对不适合对外暴露的目录,用 404 更稳妥。

巡检命令

  • curl -sI 站点地址/static/ 观察状态码,403 或 404 为通过
  • 对上传、备份、下载等目录逐个请求,而不是只测根路径
  • 把检查项写进上线清单,由发布流程统一执行

易错点

  • 只在根目录关掉而深层目录仍开启:应检查各 location 与子目录的实际配置
  • 上传目录关闭列目录但允许执行脚本:攻击者仍可上传并访问可执行文件
  • 备份文件放在 Web 根目录内:即使关了目录浏览,猜到文件名仍可直接下载
  • 把返回 403 当成安全终点:目录仍存在这一事实本身就是信息,敏感目录应移出 Web 根

数据来源与参考

  • Nginx 官方文档(ngx_http_autoindex_module)
  • Apache HTTP Server 文档(Options)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌