数据库密码严禁明文存储,应通过环境变量注入、最小权限账号、配置文件权限管控实现安全隔离,避免自定义加密等伪安全措施。

数据库密码绝不能明文存储在 PHP 配置文件或代码中,核心原则是:分离、最小权限、加密保护(针对配置本身)、环境隔离。
使用环境变量替代硬编码密码
将数据库密码通过系统环境变量注入,避免密码出现在版本控制的文件里。PHP 通过 $_ENV 或 getenv() 读取:
- Linux/macOS 下启动 PHP-FPM 或 CLI 时设置:DB_PASSWORD=your_secure_pass php index.php
- Docker 中通过 environment: 或 .env 文件(配合 docker-compose 的 env_file)注入
- Laravel/.env、Symfony/Dotenv 等框架默认支持,但注意确保 .env 不被 Web 服务器直接访问(如 Nginx 中禁止访问 location ~ \.env$ { deny all; })
限制数据库账号权限
数据库连接账号应遵循最小权限原则,不使用 root 或 sa 等高权限账户:
ECTouch是上海商创网络科技有限公司推出的一套基于 PHP 和 MySQL 数据库构建的开源且易于使用的移动商城网店系统!应用于各种服务器平台的高效、快速和易于管理的网店解决方案,采用稳定的MVC框架开发,完美对接ecshop系统与模板堂众多模板,为中小企业提供最佳的移动电商解决方案。ECTouch程序源代码完全无加密。安装时只需将已集成的文件夹放进指定位置,通过浏览器访问一键安装,无需对已有
- 只授予应用实际需要的库表级权限,例如:GRANT SELECT, INSERT, UPDATE ON myapp.users TO 'myapp_user'@'localhost';
- 禁用远程登录(除非必要),绑定到 127.0.0.1 或 Unix socket
- 定期轮换密码,并审计账号使用情况
敏感配置文件权限与位置管控
若必须使用配置文件(如 config/database.php),需严格控制其访问权限和部署路径:
立即学习“PHP免费学习笔记(深入)”;
- 配置文件不应放在 Web 根目录下(如 /var/www/html/),建议放于项目根目录外(如 /etc/myapp/config.php)或 Web 不可访问路径(如 Laravel 的 config/ 在 app/ 同级,由入口文件自动加载)
- 设置文件权限为 600(仅属主可读写),属主设为运行 PHP 的用户(如 www-data),禁止组和其他用户访问
- Git 忽略配置文件(.gitignore 加入 config/database.php 或 *.env)
避免“加密配置”带来的伪安全
不要对数据库密码做自定义加密(如 base64、简单 XOR、自己写的 AES)后存入配置——这不解决根本问题:
- 解密密钥必然要写在代码里或环境变量中,攻击者拿到代码+密钥就等于拿到明文密码
- 增加复杂度却未提升安全性,反而可能引入解密失败、部署异常等问题
- 真正需要加密的是静态敏感数据(如用户密码),用 password_hash();数据库连接凭据靠的是运行时隔离,不是算法保护










