PHP连接MongoDB时存储数据库凭证的ini文件存放位置与权限设置
问题解答
路径合理性说明
你当前将凭证文件放在站点根目录外的思路是安全合规的,完全避免了用户通过web路径直接访问到敏感配置。但/var/www作为多数web服务默认的站点根目录父级,不是最优选择,容易出现多站点权限交叉泄露的风险。
更合适的存放位置推荐
- 全局PHP配置指定路径:在
php.ini或者PHP-FPM的pool配置文件中新增自定义环境变量,比如mongodb.config_path = /etc/php/custom-conf/mongodb.ini,代码中通过getenv('mongodb.config_path')获取路径后读取配置,完全消除硬编码路径的问题。 - 专属系统配置目录:将配置放在和web服务完全隔离的系统级目录下,比如
/etc/[你的项目名]/目录,该目录仅开放给web运行用户访问,安全性更高。 - 框架内置环境配置:如果使用了PHP开发框架,直接将凭证写入框架默认的
.env配置文件即可,这类文件默认已经被框架规则限制禁止web访问,同时框架自带读取方法无需自己处理路径解析。
虚拟主机存储凭证的实现方法
你要的类似mysqli_connect的虚拟主机存储凭证效果是可以实现的:
- Apache虚拟主机配置中添加
SetEnv规则,示例:SetEnv MONGODB_USERNAME 你的数据库用户名 SetEnv MONGODB_PASSWORD 你的数据库密码 SetEnv MONGODB_URI 你的连接URI - Nginx虚拟主机配置中添加
fastcgi_param规则,示例:fastcgi_param MONGODB_USERNAME 你的数据库用户名; fastcgi_param MONGODB_PASSWORD 你的数据库密码; fastcgi_param MONGODB_URI 你的连接URI;
配置后在PHP代码中直接通过$_SERVER['MONGODB_USERNAME']或者getenv('MONGODB_USERNAME')就能获取对应凭证,不需要额外读取ini文件。
ini文件的权限设置建议
如果继续使用ini文件存储凭证,按以下规则设置权限即可:
- 首先将文件所有者设置为web运行用户(通常为
www-data):chown www-data:www-data /你的配置路径/mongodb.ini - 将文件权限设置为
400,仅允许所有者读取,其他用户无任何权限:chmod 400 /你的配置路径/mongodb.ini
内容的提问来源于stack exchange,提问作者user2402616
相关产品推荐
相关产品推荐

