phpMyAdmin 会偷偷连外网是因为默认启用版本检查功能,访问 https://www.phpmyadmin.net/latest-version.json。可通过设置 $cfg['VersionCheck'] = false 禁用,并验证 Network 面板无该请求。
为什么 phpMyAdmin 会偷偷连外网?
phpmyadmin 默认会在登录页或首页发起一个 https://www.phpmyadmin.net/latest-version.json 的 http 请求,用来检查是否有新版本。这个行为在内网隔离环境里非常危险——它不仅暴露了你的服务器存在 phpmyadmin,还可能因 dns 解析、代理配置或防火墙策略不一致导致页面加载卡顿甚至报错。
禁用自动更新检查的两种可靠方式
推荐优先修改配置文件,而非打补丁或改源码。核心是控制 $cfg['VersionCheck'] 和相关网络调用逻辑:
- 编辑
config.inc.php(若不存在可复制config.sample.inc.php),在$cfg['Servers']配置之后、?>之前添加:$cfg['VersionCheck'] = false;
- 如果已启用
blowfish_secret或其他基础配置,确保这行不在任何条件判断块内,否则可能不生效 - 某些旧版本(如 4.9.x)还需额外屏蔽
PMA_getLatestVersion()的调用点,但设$cfg['VersionCheck'] = false后该函数会被跳过,一般无需再动代码
验证是否真正生效
别只看界面没弹提示就以为关掉了。真实检测方法是抓包或查日志:
- 用浏览器开发者工具的 Network 面板过滤
latest-version.json,刷新首页,确认无该请求发出 - 临时在服务器上开启 tcpdump:
sudo tcpdump -i any host www.phpmyadmin.net -n
,然后访问 phpMyAdmin,应无匹配流量 - 如果仍看到
file_get_contents(): https:// wrapper is disabled类错误,说明 PHP 的allow_url_fopen被关了,但 phpMyAdmin 还试图调用——这恰恰证明$cfg['VersionCheck']没生效或写错位置
顺手加固:别让 config.inc.php 暴露在 Web 可访问路径下
很多内网部署直接把 phpMyAdmin 放在 /var/www/html/phpmyadmin/,而 config.inc.php 若未被 Web 服务器规则禁止访问,可能被直接下载。这是比自动更新更隐蔽的风险:
- Nginx 用户需确认有类似
location ~ ^/phpmyadmin/(config\.inc\.php|\.git|\.svn|__MACOSX)的 deny 规则 - Apache 用户检查
.htaccess是否包含Deny from all对应路径 - 最稳妥做法是把
config.inc.php移到 Web 根目录之外(如/etc/phpmyadmin/config.inc.php),并在入口index.php中用require加载
自动更新检查只是表象,真正要拦住的是所有非必要出向连接和配置泄露路径。改完 $cfg['VersionCheck'] 后,务必验证请求是否消失,而不是相信“应该关了”。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











