Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
最直接方式是用 php_admin_flag engine off 禁用 php 引擎,适用于 mod_php;若用 php-fpm,则需 filesmatch + require all denied 或 sethandler default-handler 阻断脚本执行,并须同步收紧 options、allowoverride 及系统权限。

在 Apache <directory></directory> 块中限制脚本执行,核心是阻断 PHP(或其他 CGI/脚本)在该目录下被解析和运行,而不是简单地禁止访问文件。这必须结合 Apache 指令与底层执行机制来实现,仅靠 Require 或 Options 不足以达成目标。
用 php_admin_flag engine off 禁用 PHP 引擎
这是最直接、最推荐的方式,适用于使用 mod_php(如 libphp.so)的环境:
- 必须写在主配置或虚拟主机的
<directory></directory>块内,路径为绝对路径 - 指令不可被 .htaccess 覆盖(比
php_flag更安全) - 示例:
<directory><br> php_admin_flag engine off<br></directory>
注意:若使用 PHP-FPM(FastCGI),此指令无效,需改用 SetHandler 或 FilesMatch 方式。
用 FilesMatch + Require all denied 阻断特定脚本文件访问
适用于所有 PHP 运行模式(包括 FPM),通过匹配扩展名并拒绝请求:
- 匹配常见脚本后缀,不区分大小写
- 必须配合
Require all denied(Apache 2.4+) - 示例:
<directory><br> <filesmatch><br> Require all denied<br> </filesmatch><br></directory>
⚠️ 注意:该方式只阻止 HTTP 请求响应,不阻止文件被系统级进程(如 PHP 脚本)读取或包含——因此仍需配合系统权限控制(如 www-data 对上传目录无执行权)。
用 SetHandler default-handler 彻底剥离脚本处理逻辑
适用于 PHP-FPM 或需要完全“降级为静态文件”处理的场景:
- 强制 Apache 将匹配到的文件全部当作普通文本/下载文件处理
- 不依赖 PHP 模块开关,兼容性高
- 可配合
FilesMatch精准作用于脚本扩展名
<directory><br> <filesmatch><br> SetHandler default-handler<br> </filesmatch><br></directory>
此时访问 /uploads/test.php 会返回原始源码(若未禁用 MIME 类型)或触发下载,不会执行。
补充:Options 和系统权限必须同步收紧
仅靠上述配置还不够,还需叠加基础防护:
-
Options -ExecCGI -Includes -FollowSymLinks:禁用 CGI 执行、服务端包含、符号链接(尤其避免用户上传 .htaccess 绕过) -
AllowOverride None:防止 .htaccess 覆盖上述规则 - 系统层面确保 Apache 工作用户(如 www-data)对上传目录仅有
rwx(写入+列表),无x(执行)权限;PHP 进程也不应以 root 运行










