保护数据库连接信息

时间:2012-10-11 13:47:58

标签: php database security webserver credentials

我知道问题How do I secure my database connection credentials?已被多次询问和回答(例如How to secure database passwords in PHP?)。

该问题的一个普遍接受的答案是将详细信息存储在Web根目录之外。但我很好奇为什么这真的有很大不同。

根据我的理解,一个人无法通过HTTP下载PHP文件的来源(除非你的web服务器配置不正确,但你马上就会知道)。因此,除非您无论如何都可以访问PHP文件的源代码,否则您将无法看到凭据。如果我错了,请纠正我,但这不是基本上意味着你需要shell访问吗?如果你有shell访问权限,那么你不能直接访问web root之外的文件吗?

如果该问题的答案是包含文件可能具有除了Web服务器用户之外不允许任何人读取它的特殊权限,那么(考虑到我有shell访问权限),我不能写(或者修改)任何PHP文件只是回显那些凭证?

所以问题是,无论是直接在PHP脚本中还是在Web根目录外的文件中存储凭证,真的是否真的?

3 个答案:

答案 0 :(得分:8)

假设由于网络服务器中的错误,网络服务器不再处理php文件,而是将它们视为html文件。

在这种情况下,类似http://mysite.com/config.php的内容会简单地显示数据库的凭据。

所以答案是:是的,它确实很重要,存储数据库凭据的位置和方式。

答案 1 :(得分:5)

主要问题是Web服务器可能会在以后崩溃。例如。软件更新后,php可能无法正常工作,服务器会回退直接传递文件。或者在软件更新后再次重置配置,因此PHP不再注册文件扩展名。或者服务器在负载很重的情况下崩溃,并且还开始明确地提供文件。

很多事情都可能发生,而且在某些时候搞乱配置相当容易。最好是安全的,并将其保留在文档根目录之外。

答案 2 :(得分:0)

  1. 为您的应用程序创建一个操作系统用户,例如'UserForMyApp'

  2. 对于该用户,创建一个O / S用户环境变量'MY_APP_DATABASE_PASSWORD',并设置值

  3. 将您的应用设为“UserForMyApp”

  4. 在MyApp中,读取O / S用户环境变量'MY_APP_DATABASE_PASSWORD'并使用它来登录数据库

  5. 其他非root用户无法为其他用户读取O / S用户环境变量。这是默认值。与w文件权限不同,您不必设置任何内容。

    无法将密码存储在源代码管理中。

    如果db和app在同一台机器上,则可以让db信任本地访问而无需密码。