config.inc.php 必须移出 Web 根目录并设为 600 权限:放于 /var/www/ 下(与 html/ 同级),chown root:root 且 chmod 600;禁用硬编码,改用环境变量或 secret 管理。
config.inc.php 文件不能靠 PHP 加密来保护
php 本身没有安全的“加密配置文件”机制——你写的 eval(base64_decode(...)) 或自定义解密函数,只会让代码更难读,但只要能执行 php,攻击者就能在内存里拿到明文数据库密码。真正的防护不靠混淆,而靠隔离和权限控制。
把 config.inc.php 移出 Web 根目录是第一道硬防线
绝大多数 PHP 应用被拖库,是因为 config.inc.php 放在 /var/www/html/ 这类可被直接请求的路径下,一旦 Web 服务器配置出错(比如 PHP 解析失效),它就会以纯文本暴露。
- 正确做法:把
config.inc.php放到/var/www/config.inc.php(和html/同级),再在入口文件里用绝对路径require '/var/www/config.inc.php'; - 验证是否生效:在浏览器访问
https://yoursite.com/config.inc.php,必须返回 404 或 403,绝不能看到DB_PASSWORD等内容 - 注意 Apache/Nginx 默认不禁止访问同级目录,所以移出根目录比 .htaccess 或 location 拦截更可靠
Linux 文件权限要设成 600,且属主不是 www-data
即使文件不在 Web 路径下,如果权限太松(比如 644)、属主是 www-data,Web 进程仍可能被利用后读取它——尤其当应用存在任意文件读取漏洞时。
- 执行:
chown root:root /var/www/config.inc.php(避免 Web 进程拥有者能修改) - 执行:
chmod 600 /var/www/config.inc.php(只有 root 可读写,www-data 完全无权访问) - 如果应用必须由 www-data 读取,改用
chown root:www-data+chmod 640,但要确认 Web 进程确实属于 www-data 组(systemd 下可能叫www-data、apache或nginx)
敏感值别硬编码,优先走环境变量或 secrets manager
硬编码密码在 Git 历史、备份文件、日志中都容易泄露。现代部署中,config.inc.php 应只负责加载,不存放密钥。
- 在 Web 服务器配置里注入环境变量:Nginx 用
fastcgi_param DB_PASSWORD "xxx";,Apache 用SetEnv DB_PASSWORD "xxx" - PHP 中改用:
$_SERVER['DB_PASSWORD']或getenv('DB_PASSWORD'),而非$db_password = 'xxx'; - 容器环境(Docker/K8s)直接挂载
secret卷,避免配置文件落地
最常被忽略的是:很多老项目会把 config.inc.php 加进 Git,又在注释里写“请修改此处”,结果新同事直接提交了带密码的版本——权限收紧只是兜底,从源头不落地才是关键。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











