我不喜欢在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与PHPINFO() – 黑客需要直接访问/上传利用文件
get_cfg_var:
存储在DOCUMENT_ROOT外
使用PHPINFO()不可见
– (非常糟糕)包含所有已定义的ini变量,因此每个vhost都可以通过(ini_get_all)查询它们,因此无法在共享vhost环境中使用
只要* .ini和SetEnv在Web根目录(文档根目录)之外,无论哪种方式都无关紧要.只需选择您喜欢的任何一种.我喜欢SetEnv,但这只是个人喜好.因为变量被放入_SERVER,所以使用SetEnv对我来说更有意义.使用.ini,我认为将它留给特定于代码工作方式的初始化设置更有意义.
不存储在文档根目录下是一个好主意,以防止访问可能安全的数据.
请注意,PHPinfo()将列出所有已设置的服务器变量,因此请务必小心.
最后,如果您要包含文件,请确保您不允许用户以某种方式设置无偿的../../,否则他们将可以访问可能安全的文件(甚至包括/ etc / passwd!)
我认为你的主要问题是“多么安全”.嗯,这可能就像你能得到的那样安全而不会引起严重的麻烦. PHP代码可以访问这些变量,因此如果您将它们打印出来,它们很容易看到,因此它取决于您的代码库的安全性.有可能将LDAP与MysqL一起使用,但这听起来很痛苦.