将带有数据库连接密码和用户名的 Propel xml 文件放在网络服务器上时,应该如何保护它?
-<connection><dsn>mysql:host=localhost;dbname=test</dsn><user>root</user><password/></connection>
如果我把它放在主目录中,任何知道路径的人都可以访问这个 xml 文件,或者?
有没有简单有效的解决方案?
谢谢你的建议
您可以采用两种方法来避免这些安全问题。
1) 不要将 .xml 文件存储在网络服务器上。
Propel 有一个命令config:convert-xml
可以将你的 xml 文件转换成 php 文件——它不能从 http 客户端读取。
config
config:convert-xml Transform the XML configuration to PHP code leveraging the ServiceContainer
因此,只需将 xml 文件存储在您的 VCS 存储库中,但在您的网络服务器上将其删除并生成一个 php 配置,然后将其包含在您的主 index.php 中。
或者
2) 更改您网站的入口点。
如果你有这样的结构:
.
├── composer.json
├── generated-classes/
├── generated-conf/
│ └── config.php
├── src/
│ ├── buildtime-conf.xml
│ ├── runtime-conf.xml
│ └── schema.xml
├── vendor/
│ ├── autoload.php
│ ├── ...
└── web/
└── index.php
例如,将您的 Apache 指向,./web/
而不是这样,./
则无法访问文件./web/
夹中的所有其他文件。当然,在你的index.php
are then include 语句中/../
:
include __DIR__ . '/../vendor/autoload.php';
当然,您是对的:从可以访问该配置文件的人员可以访问您的数据库的意义上说,这并不是真正安全的。
您唯一可以有效地做的事情是设置一个额外的 mysql 用户“mypropeluser”并仅分配您的应用程序所需的 mysql 权限。
毕竟,您对配置文件所说的话也适用于您的 PHP 项目。如果有人可以访问您的配置目录,他们可能还可以访问您的 php 目录并使用推进(即使配置文件以某种方式受到“保护”)做任何他们想做的事情(注入“全部删除”代码,安装后门到您的数据库...)
底线:1)您的推进配置将仅与您的(网络)服务器一样安全。2)就数据库而言(理想情况下是在另一台机器上),您可以通过减少权限来最小化最坏的情况(即不允许删除表命令)
不是很令人振奋,我知道。但我希望它有所帮助:-)