我不喜欢在document_root下存储全站点加密密钥和数据库访问信息,所以我在conf.d下使用Apache的SetEnv和php.ini文件将它们与代码库分开.最大的问题是,哪一个更好?apache vhost文件(SetEnv SITEKEY 'oinkoink!')或conf.d/xxx.ini文件(db_pass="oink?")内的环境变量?也许别的什么?
PROS n CONS:
SETENV:
+存储在DOCUMENT_ROOT外
+只有给定的vhost才能访问
-Visible with PHPINFO() - 黑客需要直接访问/上传利用到文件
get_cfg_var:
+存储在DOCUMENT_ROOT外部
+使用PHPINFO()不可见
- (非常糟糕)包含所有已定义的ini变量,因此每个vhost都可以通过(ini_get_all)查询它们,因此无法在共享vhost环境中使用
只要 *.ini 和 SetEnv 在 Web 根目录(文档根目录)之外,无论哪种方式都没有关系。只需选择您喜欢的任何一个。我喜欢 SetEnv,但这真的只是个人喜好。对我来说使用 SetEnv 更有意义,因为变量被放入_SERVER. 对于 .ini,我认为将其保留为特定于代码工作方式的初始化设置更有意义。
不存储在文档根目录下是防止访问可能安全的数据的好主意。
请注意,这phpinfo()将列出设置的所有服务器变量,因此要非常小心。
最后,如果您要包含文件,请确保您不允许../../用户以某种方式进行无偿设置,否则他们将有权访问潜在的安全文件(甚至包括/etc/passwd!)
我认为您的主要问题是“安全性如何”。好吧,这可能与您在不引起严重头痛的情况下一样安全。php 代码可以访问这些变量,因此如果您将它们打印出来,它们很容易看到,因此这取决于您的代码库的安全性。可以将 LDAP 与 MySQL 一起使用,但这听起来很痛苦。