phpMyAdmin自身不拼接SQL,风险源于配置不当:需关闭AllowArbitraryServer、EnableQbe、DisableIS三个高危开关,清空UploadDir/SaveDir,禁用书签并回收对应权限,且无法防护业务层SQL注入。
phpMyAdmin自身不执行拼接SQL,但配置不当会放大风险
phpmyadmin不是php应用里“写sql的地方”,它本身不拼接用户输入进查询——所有sql都来自你手动输入或界面生成。真正危险的是:你用它连的数据库账号权限过大、你开启的高危功能没关、你升级后没改默认配置。它只是个工具,漏洞从来不在界面,而在你给它的权限和你留的后门。
必须关闭的三个默认高危开关
5.x版本虽默认收紧,但很多升级用户只复制文件,没动config.inc.php。这几个配置不设为false,等于把钥匙塞回攻击者手里:
-
$cfg['AllowArbitraryServer'] = false:防止通过URL指定任意MySQL主机(SSRF入口) -
$cfg['EnableQbe'] = false:关掉“按示例查询”(QBE),该功能动态拼SQL,4.x时代就爆过注入 -
$cfg['Servers'][$i]['DisableIS'] = true:禁用INFORMATION_SCHEMA查询,避免泄露表结构
注意:$cfg['UploadDir']和$cfg['SaveDir']必须留空,否则攻击者可能上传恶意SQL文件并触发执行。
书签(Bookmarks)不是SQL注入入口,但它是权限失控的信号灯
书签功能本身不执行SQL,只往pma__bookmark表存明文语句。风险在于:如果普通用户能往这个表写数据,说明你的数据库账号权限已经失控——它不该有INSERT或UPDATE权限到phpmyadmin库。
- 前端隐藏菜单没用,后端接口
tbl_bookmark.php仍可被直接调用 - 正确做法是两步:在
config.inc.php中设$cfg['Bookmark']['default'] = false;再执行DROP TABLE IF EXISTS `phpmyadmin`.`pma__bookmark` - 更关键的是回收权限:
REVOKE INSERT, UPDATE ON `phpmyadmin`.`pma__bookmark` FROM 'app_user'@'%'
别指望phpMyAdmin替你防住业务层SQL注入
它管不了你PHP代码里写的mysqli_query("SELECT * FROM users WHERE id = " . $_GET['id'])。这类问题必须靠你自己的代码防护:
立即学习“PHP免费学习笔记(深入)”;
- 一律用
PDO::prepare()或mysqli::prepare(),禁止字符串拼接 - 对
ORDER BY字段等无法参数化的动态片段,只能用白名单:in_array($_GET['sort'], ['name', 'email', 'created_at']) -
LIKE子句里的%必须在PHP层加,不能写进占位符右边:$stmt->execute(["%{$keyword}%"])
最常被忽略的一点:PDO连接必须显式声明字符集,charset=utf8mb4缺不得,否则宽字节注入仍可能绕过预处理。



















