本地phpMyAdmin受DNS rebinding攻击影响,因其默认不校验HTTP Host头,攻击者可通过恶意域名解析(如attacker.com→127.0.0.1)绕过同源策略,伪装成本地服务访问数据库管理界面;需在config.inc.php中强制指定$cfg['Servers'][$i]['host']='127.0.0.1'并设$cfg['AllowArbitraryServer']=false,同时在Nginx/Apache层校验Host头仅允许localhost或127.0.0.1,二者缺一不可。
为什么本地
php
MyAdmin 会受 DNS rebinding 攻击影响
因为
phpmyadmin
默认不校验 http host 头,攻击者可通过恶意域名解析(比如把
解析到
)诱使浏览器发起请求,绕过同源策略,让远端服务器“假装”是本地服务,从而读取或操作你的数据库管理界面。
这不是 phpMyAdmin 的 bug,而是它被设计为 Web 应用——只要能访问到它的 HTTP 接口,就默认信任 Host 头。本地开发时习惯用
或
,但一旦你开了端口、关了防火墙、或用了代理,攻击面就暴露了。
必须设置
并禁用 Host 头动态解析
phpMyAdmin 从 4.9.0 起支持 Host 白名单机制,但默认不启用。关键动作是显式锁定后端 MySQL 连接目标,并关闭对
的依赖。
编辑
,找到对应 server 配置段,在
中强制指定:
添加:
删掉或注释掉任何类似
的动态赋值——这在某些旧教程里常见,极其危险
Web 服务器层加 Host 头校验(Nginx / Apache)
phpMyAdmin 自身不拦截非法 Host,得靠前置 Web 服务器兜底。否则攻击者直接发
请求仍能抵达 PHP 脚本。
Nginx:在 server 块中加
,或更稳妥地只允许明确的 server_name:
Apache:用
+
别信
——这是针对客户端 IP 的,而 DNS rebinding 的请求 IP 就是
,完全绕过
开发环境不该暴露到公网或局域网可访问
很多人以为“我在家里的路由器后面就安全”,但现代攻击链常利用内网横向移动,或者通过鱼叉邮件诱导点击恶意链接,触发浏览器向
发请求(如果该域名真被解析到本地)。
PHP 8.5.5
PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载
立即学习
“
PHP免费学习笔记(深入)
”;
确认 phpMyAdmin 目录不在 Web 根目录下被意外暴露;路径应为
这类可控位置,而非
下任意可猜路径
禁用 Apache 的
、Nginx 的
,防止目录遍历或误配导致配置文件泄露(如
)
如果只是本地调试,用 PHP 内置服务器启动(
)并绑定到
,比跑完整 LAMP 更轻量也更隔离
真正麻烦的不是配几行代码,而是 Host 头校验和网络层绑定要同时生效——漏掉任意一环,攻击者都能用一个伪造 DNS 记录打穿整个防护逻辑。
attacker.com127.0.0.1http://localhost/phpmyadminhttp://127.0.0.1/phpmyadmin$cfg['Servers'][$i]['host']$_SERVER['HTTP_HOST']config.inc.php$cfg['Servers'][$i]$cfg['Servers'][$i]['host'] = '127.0.0.1';$cfg['Servers'][$i]['host'] = '127.0.0.1';
$cfg['Servers'][$i]['port'] = '3306';
$cfg['Servers'][$i]['auth_type'] = 'cookie';
// 禁用基于 Host 头的自动识别
$cfg['AllowArbitraryServer'] = false;$cfg['Servers'][$i]['host'] = $_SERVER['HTTP_HOST'];Host: evil.comif ($host !~ ^(localhost|127\.0\.0\.1)$) { return 444; }server_name localhost 127.0.0.1;RewriteCond %{HTTP_HOST} !^(localhost|127\.0\.0\.1)$ [NC]RewriteRule ^ - [F]Allow from 127.0.0.1127.0.0.1http://router.local/phpmyadmin/var/www/html/phpmyadmin//var/www/html/mod_userdirautoindexconfig.inc.phpphp -S 127.0.0.1:8000 router.php127.0.0.1