phpEnv 安全加固需四步:1. 为 root 设强密码并删除空用户;2. 修改 my.ini 绑定 127.0.0.1 禁远程;3. 删除 test 库与匿名用户,重命名 mysql 库;4. 为应用创建最小权限专用账户。

phpEnv 是 Windows 下的轻量级 PHP 集成环境,自带 Apache、MySQL 和 PHP,常用于本地开发或小型部署。它默认配置偏宽松,数据库(MySQL)部分尤其容易被忽视——比如 root 账户无密码、远程可连、测试库未删、权限过大。这些不是“可能被攻击”,而是上线即暴露的风险。
MySQL root 账户必须设密码且禁用空密码登录
phpEnv 安装后,MySQL 的 root 用户默认为空密码,且允许从 localhost 和 127.0.0.1 两种方式登录(部分版本甚至开放 %)。这等于把数据库钥匙挂在门把手上。
- 用 phpEnv 自带的 MySQL 客户端或命令行执行:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的强密码'; - 立即删除空用户:
DROP USER ''@'localhost'; DROP USER ''@'127.0.0.1'; - 检查是否还存在通配符用户:
SELECT User, Host FROM mysql.user;,若有'root'@'%'或''@'%',必须DROP - 改完后重启 MySQL 服务(phpEnv 控制面板里点“重启 MySQL”)
禁止 MySQL 远程访问(除非明确需要)
phpEnv 默认监听 0.0.0.0:3306,意味着只要知道 IP 就能连上——本地虚拟机、局域网其他设备、甚至某些内网穿透工具都可能意外暴露端口。
- 编辑 phpEnv 目录下的
mysql\my.ini(路径类似C:\phpEnv\mysql\my.ini) - 在
[mysqld]段下添加:bind-address = 127.0.0.1 - 确认没有
skip-networking = 0或注释掉它;如有port = 3306保持即可 - 保存后重启 MySQL,再用
netstat -ano | findstr :3306验证监听地址是否变为127.0.0.1:3306
删掉 test 库和匿名用户,重命名 mysql 数据库
phpEnv 初始化时会创建 test 数据库和匿名用户(''@'localhost'),它们是 SQL 注入或提权的常见跳板。另外,mysql 系统库名是公开知识,攻击者写脚本时直接爆破这个库名。
立即学习“PHP免费学习笔记(深入)”;
- 删除测试库:
DROP DATABASE IF EXISTS test; - 删除匿名用户:
DROP USER IF EXISTS ''@'localhost'; - 重命名系统库(可选但推荐):
RENAME DATABASE mysql TO mysql_system;(注意:5.7+ 已移除该语法,此时改用备份 + 创建新库 + 导入方式;8.0+ 必须用mysqldump导出再导入到新库名) - 执行
FLUSH PRIVILEGES;刷新权限
应用账户必须按需授权,绝不复用 root
你的 PHP 应用连接数据库,不该用 root,而应建专用账户,只给对应库的 SELECT, INSERT, UPDATE, DELETE,且限定来源为 127.0.0.1 或 localhost。
- 创建应用用户:
CREATE USER 'app_user'@'localhost' IDENTIFIED BY '强密码'; - 授权(假设库名为
myapp_db):GRANT SELECT, INSERT, UPDATE, DELETE ON myapp_db.* TO 'app_user'@'localhost'; - 回收多余权限:
REVOKE FILE, PROCESS, SUPER, SHUTDOWN ON *.* FROM 'app_user'@'localhost'; - PHP 连接时,DSN 或配置里用的是这个账户,不是 root
最容易被忽略的一点:phpEnv 的 MySQL 配置文件(my.ini)常被修改后忘记重启服务,导致设置不生效;另外,有些版本的 phpEnv 会在重启 Apache 时自动拉起 MySQL,但不校验配置合法性,错误会被静默吞掉。改完务必手动验证监听、登录、权限三件事,别只信控制面板上的“绿色启动灯”。



















