最有效防护是Web服务器层IP白名单+禁用config认证+关闭MySQL远程连接+禁用phpMyAdmin高危功能。需在Apache/Nginx配置访问控制,设auth_type为cookie并配置blowfish_secret,删MySQL宽泛host账号,关闭UploadDir等危险选项。
直接限制 phpMyAdmin 的 Web 访问入口
phpmyadmin 本身不是数据库,它只是个 web 界面;阻止未授权访问的第一道防线,永远在 web 服务器层。别指望靠 mysql 用户权限来拦住 phpmyadmin 登录页——只要网页能打开,攻击者就能暴力试密码或利用已知漏洞。
最有效的方式是用 Apache 或 Nginx 配置 IP 白名单:
- Apache:编辑
phpmyadmin.conf或主配置中的<directory></directory>块,把Allow from all改成Allow from 192.168.1.50 2001:db8::1(支持 IPv6) - Nginx:在 location 块里加
allow 192.168.1.50;和deny all;,注意顺序不能反 - 若用的是 WAMP/XAMPP,检查
httpd-xampp.conf中的<directory></directory>段,确认Deny from all未被误删或覆盖
常见错误:只改了 config.inc.php 里的 $cfg['Servers'][$i]['host'],这控制的是 phpMyAdmin 连哪个 MySQL 实例,跟“谁能打开 phpMyAdmin 页面”完全无关。
禁用 config 认证模式,强制走登录流程
如果 config.inc.php 里设置了 $cfg['Servers'][$i]['auth_type'] = 'config',意味着用户名密码硬编码在文件里,任何能读到该文件的人(比如 PHP 解析失败暴露源码、备份文件泄露)就等于拿到了数据库 root 权限。
必须改为 'cookie' 或 'http':
立即学习“PHP免费学习笔记(深入)”;
-
$cfg['Servers'][$i]['auth_type'] = 'cookie';—— 最常用,依赖浏览器 Cookie + Blowfish 加密 - 务必设置非空
$cfg['blowfish_secret'],长度建议 32 字符以上,不能是默认值或空字符串 - 若启用了
session.save_path权限问题,可能导致登录后立即登出,检查 PHP 错误日志里的session_start()报错
别忽略 blowfish_secret:没设或设得太短,cookie 模式会降级为明文传输凭证,形同虚设。
切断 MySQL 层的远程连接能力
即使 phpMyAdmin 被锁死,攻击者仍可能绕过它直连 MySQL 端口(3306)。所以得从数据库侧堵死非必要通路:
- 检查所有 MySQL 用户的
host字段:执行SELECT user, host FROM mysql.user;,删掉或锁定'%'、'192.168.%'、'0.0.0.0'这类宽泛 host 的账号 - root 用户应仅保留
'localhost'和'127.0.0.1'两条记录,删掉其他 host 的 root 行 - 如需远程管理,不要用
'%',而应明确指定运维 IP,例如'admin@203.0.113.42' - MySQL 8.0+ 可配合
account_locked = 'Y'快速冻结可疑账号,5.7.6+ 也支持,但低于此版本只能改plugin为auth_socket并清空authentication_string
注意:修改 mysql.user 表后必须执行 FLUSH PRIVILEGES;,否则变更不生效;且同一用户名不同 host 是独立账号,漏改一条就等于留后门。
关闭 phpMyAdmin 的高危功能开关
默认安装的 phpMyAdmin 开放了很多危险操作入口,比如上传 SQL 文件、创建新数据库、执行任意 SQL——这些对普通用户毫无必要,却极大扩大攻击面。
在 config.inc.php 中关闭它们:
-
$cfg['UploadDir'] = '';和$cfg['SaveDir'] = '';—— 禁用导入/导出目录功能 -
$cfg['Servers'][$i]['DisableIS'] = true;—— 关闭信息模式(INFORMATION_SCHEMA)扫描,防止枚举数据库结构 -
$cfg['AllowArbitraryServer'] = false;—— 阻止用户在登录页手动填写任意 MySQL 地址 - 若不需要多数据库管理,可设
$cfg['LeftFrameDBTree'] = false;减少左侧导航暴露的信息量
这些配置项不会影响基础查询和表管理,但能显著降低被自动化工具探测和利用的概率。改完记得重启 Web 服务或清空 OPcache,否则可能缓存旧行为。
真正难防的不是技术漏洞,而是管理员把 phpMyAdmin 暴露在公网还开着 root 密码弱口令、允许任意 host 连接、又用 config 认证模式——这些组合起来,等于把数据库钥匙挂在门口的挂钩上。



















