禁用apache目录危险执行权限的核心是显式配置options指令关闭execcgi、includes、multiviews等高危选项,并配合filesmatch拦截脚本执行、allowoverride none防止.htaccess篡改,形成纵深防护。

要禁用 Apache 中目录的危险执行权限,核心是合理配置 Options 指令,同时配合其他指令形成纵深防护。Options 本身不控制“能否访问”,而是决定“能启用哪些功能”,其中 ExecCGI、Includes、MultiViews 等直接关联脚本解析与服务端执行,是攻击入口点,必须显式关闭。
明确禁用高危选项,不依赖默认值
Apache 的默认 Options 值因版本和发行版而异,不能假设安全。必须在 <directory></directory> 块中**显式声明禁用项**:
-
Options -ExecCGI -Includes -MultiViews:最常用组合,关闭 CGI 执行、服务端包含(SSI)、内容协商,适用于上传目录、静态资源目录 -
Options -ExecCGI -Includes -MultiViews -Indexes:再加-Indexes,防止无 index 文件时暴露文件列表 -
Options None:彻底清空所有功能开关,适合备份目录、配置目录等完全不允许交互行为的路径
上传目录必须额外拦截脚本文件执行
仅靠 Options 不足以阻止 PHP/Python 等脚本被解释执行,因为现代模块(如 mod_php)可能绕过 Options 判断。需叠加 <filesmatch></filesmatch> 规则:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 使用不区分大小写的正则匹配常见脚本后缀:
<filesmatch></filesmatch> - 搭配拒绝策略:
Require all denied(Apache 2.4 推荐)或Order Deny,Allow && Deny from all(2.2 兼容) - 示例完整块:
Options -ExecCGI -Includes -MultiViews
Require all denied
避免继承风险,关闭 .htaccess 覆盖能力
如果允许 AllowOverride All,攻击者上传恶意 .htaccess 就可能重新启用 ExecCGI 或覆盖 Require 规则。生产环境应强制关闭:
-
AllowOverride None:禁止任何 .htaccess 覆盖,提升性能且杜绝配置被篡改 - 若确需局部覆盖(如重写规则),限定为
AllowOverride FileInfo,排除 AuthConfig 和 Limit 类指令 - 敏感目录(如
/backups、/config)务必同时设Options None+AllowOverride None+Require all denied
验证是否真正生效
配完不测等于没配。重点检查三项:
- 访问上传目录下
test.php文件:应返回 403 或 404,而非解析执行 - 访问无 index 文件的目录(如
/uploads/):不应显示文件列表(确认-Indexes生效) - 尝试通过符号链接访问系统文件(如
/etc/passwd):若未配FollowSymLinks,应拒绝;若已配,需确保目标不在 DocumentRoot 下且无越权风险









