核心是切断服务器对web根目录外路径的解析与响应能力,需从apache配置(禁用indexes、限制allowoverride)、文件系统权限(低权限运行、敏感路径拒绝访问)及应用逻辑(realpath+白名单校验)三方面协同加固。

防止 Apache 目录遍历攻击,核心不是堵住“../”这种字符串,而是切断服务器对 Web 根目录之外路径的解析与响应能力。配置必须从 Apache 服务层、文件系统权限、以及应用逻辑三方面协同控制。
禁用目录索引(最直接有效的一步)
目录遍历常与目录浏览共存——攻击者先看到 /uploads/ 下有哪些文件,再尝试 /uploads/../../etc/passwd。所以第一步必须关闭自动列表功能:
- 打开
C:\xampp\apache\conf\httpd.conf(Windows)或/etc/apache2/apache2.conf(Linux),搜索所有<directory></directory>块 - 找到类似这行:
Options Indexes FollowSymLinks Includes ExecCGI - 改为显式禁用写法:
Options -Indexes +FollowSymLinks +Includes +ExecCGI(推荐)或精简版:Options FollowSymLinks Includes ExecCGI - 特别注意 XAMPP 用户:还要检查
httpd-xampp.conf,它可能在/xampp/apache/conf/extra/下,会覆盖主配置中对htdocs的设置 - 改完务必重启 Apache,否则不生效
阻断 .htaccess 绕过风险
如果允许 .htaccess 覆盖主配置,攻击者上传含 Options +Indexes 的文件就能让前面所有修改失效:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 在同一个
<directory></directory>块中,确认AllowOverride的值 - 若项目不需要运行时重写规则(如静态站、简单 PHP),设为:
AllowOverride None - 若必须支持(如 Laravel),则人工检查项目根目录下的
.htaccess,确保不含Options +Indexes、Options +Includes等危险指令
限制敏感路径与文件类型访问
光关掉目录列表不够,攻击者仍可能直接请求 .git/config、config.php.bak 或 /etc/shadow(若路径解析失控):
- 在
<directory></directory>或全局配置中添加文件匹配规则,例如:
Require all denied
- 对上传目录(如
/uploads/)额外加固:Options None(禁用全部扩展功能),并禁用脚本执行:SetHandler default-handler - 避免使用
FollowSymLinks,尤其在用户可写目录;如需符号链接,改用更安全的SymLinksIfOwnerMatch
配合基础系统与代码层防护
Apache 配置只是防线一环,脱离其他措施效果有限:
- 确保 Apache 进程以低权限用户运行(如
www-data或daemon),且该用户对/etc/、/root/等系统目录无读取权限 - 后端代码中处理用户传入路径时,必须用
realpath()解析绝对路径,并严格比对是否落在白名单目录内(如strpos(realpath($path), $_SERVER['DOCUMENT_ROOT']) === 0) - 启用
mod_security并加载 OWASP CRS 规则集,可拦截含%2e%2e/、../的恶意请求 - 隐藏 Apache 版本号:
ServerTokens Prod和ServerSignature Off,减少攻击者信息获取










