phpMyAdmin 4.9 本身不包含 CVE-2016-5734 或 CVE-2018-12613 等历史 RCE 漏洞,因其已移除 preg_replace/e 调用并重写 target 参数校验逻辑;若出现类似 RCE 行为,多因版本误判、旧文件残留、PHP 配置不当(如 allow_url_include=On)或 MySQL 权限滥用所致。

phpMyAdmin 4.9 本身**不包含 CVE-2016-5734(preg_replace RCE)或 CVE-2018-12613(远程文件包含)等历史 RCE 漏洞**——这些漏洞只影响 4.8.1 及更早版本。如果你在 phpMyAdmin 4.9 环境中观察到类似 RCE 行为,大概率是误判版本、混入了旧版文件,或后端 PHP 配置/其他组件引入了风险。
确认你真在用 phpMyAdmin 4.9
很多人把「界面显示 4.9.x」当成准确版本,但实际可能:
- 服务器上部署的是
4.9.0.1,但setup.php或js/vendor目录残留了4.8.1的旧文件(尤其从低版本升级未清理) - 访问的 URL 路径指向另一个未更新的实例(如
/phpmyadmin-old/或 Docker 容器未重建) - 通过代理或 CDN 缓存看到旧版响应,而真实后端已是 4.9
验证方式:直接访问 /phpmyadmin/changelog.php,查看顶部声明的版本号;或登录后点右上角「关于」→「版本信息」,核对 Version 和 Git revision。若显示 4.8.1 或 4.6.2,修复动作应针对该版本,而非 4.9。
phpMyAdmin 4.9 已移除高危函数调用
CVE-2016-5734 的核心是 preg_replace + /e 修饰符,而 phpMyAdmin 自 4.7.0 起就彻底重构了相关逻辑,4.9 中已无任何使用 preg_replace 执行用户输入的代码路径。同理,index.php 中的 target 参数校验逻辑在 4.9 中已被重写,Core::checkPageValidity() 不再依赖多次 urldecode() 绕过,黑名单检查也转为白名单+严格路径规范化。
这意味着:只要你是干净安装的官方 4.9.0+(非降级/混装),且 PHP 版本 ≥ 7.2(/e 修饰符在 PHP 7.0+ 已被完全移除),RCE 类漏洞在 phpMyAdmin 层面已无利用基础。
真正需要检查的三个薄弱环节
即使 phpMyAdmin 4.9 本身安全,以下配置或共存组件仍可能导致 RCE 表象:
-
PHP 配置开启
allow_url_include=On:这会让任意文件包含(如日志路径、session 文件)直接升级为 RCE,与 phpMyAdmin 版本无关 -
MySQL
secure_file_priv为空且 Web 目录可写:攻击者可通过SELECT ... INTO OUTFILE写入 Webshell,这不是 phpMyAdmin 漏洞,而是 MySQL 权限滥用 -
Web 服务器(如 Apache/Nginx)配置错误:例如将
.php文件交由 Python 解释器执行,或启用危险的mod_rewrite规则,导致上传的.htaccess控制解析行为
排查命令示例:
mysql> SHOW VARIABLES LIKE 'secure_file_priv';<br>mysql> SELECT @@version_compile_os, @@version_compile_machine;
若返回 secure_file_priv 为空值(不是 NULL),立刻在 MySQL 配置中设为具体路径(如 /var/lib/mysql-files/)并重启服务。
升级不是万能解,清理和隔离才是关键
很多团队以为「升级到 4.9 就万事大吉」,却忽略了最常出问题的环节:
- 旧版
config.inc.php被直接复制到新目录,其中可能含$cfg['Servers'][$i]['auth_type'] = 'config'和明文密码,一旦 Web 目录可列,等于送钥匙 -
tmp/、libraries/、vendor/目录权限设为777,给任意文件写入留了后门 - 未禁用
setup.php(即使 4.9 中它已默认禁用),但有人手动改回$cfg['SetupDir'] = 'setup';
正确做法:下载官方 phpMyAdmin-4.9.7-all-languages.tar.gz(最新稳定版),解压后仅保留 config.inc.php 和必要语言包,其余全量覆盖;然后执行:chmod -R 755 . && chmod 644 config.inc.php;最后确认 setup.php 文件不存在或已重命名。
真正的风险往往不在 phpMyAdmin 的代码里,而在你是否清楚每一行配置的含义、每一份日志的落盘位置、以及每一个 MySQL 用户的实际权限边界。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











