直接禁用indexes并设置require all denied是限制apache根目录遍历最有效的方式,需在块中改为options -indexes +followsymlinks且require all denied,重启后验证返回403 forbidden。

直接禁用 Indexes 并设置 Require all denied 是限制 Apache 对根目录遍历权限最有效的方式。仅靠“不显示列表”不等于安全,必须从配置逻辑上切断未授权访问路径。
关闭根目录的目录浏览功能
Apache 默认允许在无 index 文件时列出根目录内容,这是遍历的起点。关键操作是移除或显式禁用 Indexes:
- 打开 C:\xampp\apache\conf\httpd.conf(Windows)或 /etc/apache2/apache2.conf(Linux)
- 查找全局
<directory></directory>块(对应系统根目录/) - 将
Options Indexes FollowSymLinks改为Options -Indexes +FollowSymLinks(推荐显式写法) - 若该块中已有
Require all granted,务必改为Require all denied
确保网站根目录以外路径完全不可达
Apache 进程不应拥有访问系统根目录的权限,否则可能被路径穿越利用:
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
- 检查所有
<directory></directory>块,特别是针对/、/opt、/etc等路径的配置 - 确认这些块中包含
Require all denied和AllowOverride None - Linux 下可进一步通过文件系统权限控制:确保 Apache 运行用户(如
www-data)对/只有执行权(x),无读(r)无写(w)
验证是否真正生效
改完配置后必须实测,不能只看页面是否“没显示列表”:
- 重启 Apache 服务(
xampp-control.exe或sudo systemctl restart apache2) - 访问
http://localhost/(确保 htdocs 下无index.html) - 正确响应应为 HTTP 403 Forbidden,且响应体含
You don't have permission to access / on this server. - 若返回 200 并列出文件,说明某处
Indexes仍启用,或Require规则被子目录覆盖
防止 .htaccess 绕过主配置
如果项目需支持 .htaccess,必须严格约束其能力,避免重新开启遍历:
- 在网站根目录对应的
<directory></directory>块中,设AllowOverride None(最安全) - 若必须设
AllowOverride All,则检查项目中所有.htaccess文件,禁止出现Options +Indexes或Allow from all类宽松指令 - 建议用
FilesMatch "\.(env|log|ini|bak)$"配合Require all denied拦截敏感文件










