phpMyAdmin 默认会向 phpmyadmin.net 发送版本检查请求,暴露服务器信息;需同时设置 $cfg['VersionCheck'] = false; 和 $cfg['SendErrorReports'] = 'never'; 并验证生效。
为什么 phpMyAdmin 会偷偷检查更新
新版 phpmyadmin 默认启用 $cfg['checkconfigurationpermissions'] 和自动更新检查(通过 https://www.phpmyadmin.net/latest.json),每次登录或刷新首页都可能触发 http 请求。这不是“后门”,但确实会向外发送服务器 ip、phpmyadmin 版本、php 版本、操作系统类型等信息——如果你在内网、审计环境或隐私敏感场景下,这属于不必要暴露。
禁用更新检查的两个关键配置项
只改 $cfg['VersionCheck'] = false; 不够,它只关掉右下角提示,底层仍可能发请求。必须同时关闭主动探测机制:
-
$cfg['VersionCheck'] = false;:停用 UI 层版本比对和提示 -
$cfg['SendErrorReports'] = 'never';:防止错误上报时附带环境信息(虽非更新检查,但同属外发行为)
这两行必须写在 config.inc.php 的 $cfg 配置块之后、末尾之前,且不能被注释或包裹在条件判断里(比如 if (false) { ... } 也不行)。
确认是否真生效:看 Network 和日志
光改配置不验证等于没改。打开浏览器 DevTools → Network 标签页,登录 phpMyAdmin 后观察是否有 latest.json 或 check_version.php 类请求发出;更稳妥的是在服务端抓包:
- 临时运行
tcpdump -i any port 443 and host www.phpmyadmin.net -w pma-check.pcap - 刷新页面,停止抓包,用 Wireshark 打开查看有无 TLS 握手或 HTTP 请求
- 或者查 Apache/Nginx 访问日志,过滤
latest.json字样
如果仍有请求,大概率是配置文件没被加载(比如你改了错误路径下的 config.inc.php),或用了 Docker 镜像但把配置挂载到了覆盖位置之外。
立即学习“PHP免费学习笔记(深入)”;
Docker 环境下容易漏掉的点
官方镜像(phpmyadmin/phpmyadmin)默认不读取容器内 /etc/phpmyadmin/config.user.inc.php,除非你显式挂载并设置环境变量:
- 必须用
-v /path/to/your/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php:ro - 且该文件里要包含
$cfg['VersionCheck'] = false;,不能只靠CONFIG_EXTRA_ARGS注入 - 镜像启动时若指定了
PMA_VERSION_CHECK=0,它只影响部分旧版镜像,新版已弃用该变量
最保险的做法:进容器执行 php -r "include '/etc/phpmyadmin/config.inc.php'; var_dump(\$cfg['VersionCheck']);",输出 bool(false) 才算真正落地。



















