数据库配置须分离代码与敏感信息,禁用明文密码提交,通过环境变量(如$_env)或dotenv加载,按环境物理分离配置文件,显式设置charset和pdo选项,严禁日志输出密码等敏感值。

数据库配置文件是 PHP 项目中关键的敏感信息载体,设计时需兼顾安全性、可维护性与环境适配能力。核心原则是:配置与代码分离、敏感信息不硬编码、不同环境使用独立配置、禁止提交明文密码到版本库。
使用环境变量隔离敏感配置
避免在配置文件中直接写入数据库密码、用户名等。推荐通过环境变量注入,如使用 $_ENV 或 getenv() 读取:
- 在 Web 服务器(如 Nginx/Apache)或 CLI 启动脚本中设置
DB_HOST=localhost DB_USER=app DB_PASS=xxx - PHP 中统一读取:
$host = $_ENV['DB_HOST'] ?? '127.0.0.1'; - 搭配
.env文件(仅本地开发) +vlucas/phpdotenv加载,但确保.env已加入.gitignore
按环境拆分配置结构
不建议用 if-else 判断环境来切换参数,而应采用物理分离或自动加载机制:
LANUX V1.0 蓝脑商务网站系统 适用于网店、公司宣传自己的品牌和产品。 系统在代码、页面方面设计简约,浏览和后台管理操作效率高。 此版本带可见即可得的html编辑器, 方便直观添加和编辑要发布的内容。 安装: 1.解压后,更换logo、分类名称、幻灯片的图片及名称和链接、联系我们等等页面。 2.将dbconfig.php里面的数据库配置更改为你的mysql数据库配置 3.将整个文件夹上传至
- 目录结构示例:
config/database/production.php、config/database/staging.php、config/database/local.php - 运行时根据
APP_ENV=production自动加载对应文件,主配置文件只做兜底和合并逻辑 - 所有环境配置文件均不提交密码,密码始终由环境变量补充
配置项命名清晰且保持最小必要
只暴露真实需要控制的参数,避免冗余字段。典型安全配置应包含:
立即学习“PHP免费学习笔记(深入)”;
- host、port、dbname、username、password(全部动态获取)
-
charset:显式设为
utf8mb4,避免连接层乱码 -
options:启用
PDO::ATTR_EMULATE_PREPARES => false和PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION - 禁用
unix_socket等非常规连接方式,除非明确需要
禁止写入日志或错误输出敏感值
配置加载后,严禁将完整配置数组(尤其含 password)用于 var_dump、error_log 或异常上下文:
- 调试时如需确认连接参数,可单独打印 host/port/dbname,跳过 password 和 username
- 异常捕获中若需记录数据库问题,仅记录错误码和 SQL 状态,不拼接凭证
- 上线前检查所有
print_r($config)类语句是否已移除或注释










