当您将Propel xml文件放在网络服务器上时,如何保护带有数据库连接密码和用户名的文件?
-<connection><dsn>mysql:host=localhost;dbname=test</dsn><user>root</user><password/></connection>
如果我把它放在主目录中,任何知道路径的人都可以访问这个xml文件或者?
是否有简单有效的解决方案?
感谢您的建议
答案 0 :(得分:3)
您可以通过两种方式解决这些安全问题。
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配置,然后将其包含在主索引中。
或
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
中包含/../
的语句:
include __DIR__ . '/../vendor/autoload.php';
答案 1 :(得分:0)
你是对的,当然:从访问该配置文件的人可以获得对数据库的访问权限,它并不是真正安全。
你唯一能做的就是设置一个额外的mysql用户“mypropeluser”并只分配你的应用程序所需的mysql权限。
毕竟,您对配置文件的看法对您的PHP项目也是如此。如果有人可以访问你的配置目录,他们可能也可以访问你的php目录并使用propel(即使配置文件被某种程度上“保护”)来做你想做的事情(注入“全部删除”代码,安装后门到你的数据库...)
底线: 1)您的推进配置只会与您的(网络)服务器一样安全。 2)就数据库而言(理想情况下是在另一台机器上),您可以通过减少权限来最小化最坏情况(即不允许丢弃表命令)
我知道,不是很令人振奋。但我希望它有所帮助: - )