phpMyAdmin的“PHP信息”按钮由内置配置$cfg['ShowPhpInfo'] = false控制,必须在config.inc.php中$cfg配置块后、?>前添加,禁用后需硬刷新清除浏览器缓存。
phpMyAdmin 的“PHP信息”按钮从哪来?
这个按钮出现在左下角“更多”菜单里,对应 phpinfo() 调用,本质是 phpmyadmin 主动执行了 php 内置函数。它不依赖 mysql 权限,只要登录用户能访问 phpmyadmin 界面,就能点开——而 phpinfo() 会暴露 php 版本、扩展列表、php.ini 路径、环境变量、已加载模块等敏感信息,内网审计或生产环境必须关掉。
禁用方法:只改 config.inc.php 就够了
不需要删文件、改 JS 或加 .htaccess 规则。phpMyAdmin 提供了原生开关,写错位置或漏掉关键项会导致失效:
-
$cfg['ShowPhpInfo'] = false;必须加在config.inc.php的$cfg配置块之后、?>之前 - 不能放在
if条件块里(比如if (true) { $cfg['ShowPhpInfo'] = false; }),phpMyAdmin 不识别这种包裹 - 如果用了 Docker,确认你改的是容器内真实加载的配置文件(常见路径:
/etc/phpmyadmin/config.inc.php或挂载进来的config.user.inc.php) - 改完不用重启 Web 服务,但浏览器可能缓存旧 JS,需硬刷新(Ctrl+Shift+R)
为什么按钮还在?常见失效原因
改了配置但按钮没消失,大概率是以下情况之一:
- 改错了文件:一键包(如宝塔、AMH)常把默认配置放在
/www/server/phpmyadmin/下,而实际生效的是/www/server/phpmyadmin/libraries/vendor_config.php或通过环境变量注入的配置 -
$cfg['ShowPhpInfo']被后面同名定义覆盖:检查整个文件,确保只有一处赋值,且没被注释掉 - 用了自定义主题或插件:某些第三方主题会重写底部菜单 HTML,绕过原生配置;此时需查主题 JS 是否硬编码了该链接
- 浏览器 localStorage 缓存了旧菜单结构:清空 Application → Storage → Local Storage 里对应域名下的所有键,再刷新
顺手加固:防绕过调用
按钮消失 ≠ 功能消失。攻击者若知道路径,仍可直接访问 phpinfo.php(如果文件存在)或构造请求触发内部调用。最稳妥的做法是双保险:
- 确认 Web 服务器层禁止访问
phpinfo.php:Nginx 加location = /phpinfo.php { deny all; },Apache 加<files> Require all denied </files> - PHP 层禁用函数(可选):在
php.ini中设disable_functions = phpinfo,但注意这会影响其他依赖该函数的脚本 - 别留着
phpinfo.php文件:phpMyAdmin 官方包不自带此文件,但某些旧版镜像或手动部署时可能被误放,直接删掉
真正起效的关键不是“按钮没了”,而是 phpinfo() 调用被彻底拦截——配置开关 + 文件/路由屏蔽,缺一不可。否则一个 URL 就能回血。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











