如何最好地保护数据库连接字符串?

11

我正在使用PHP编写一组基于数据库的应用程序。这些应用程序将在Linux服务器上以其自身的用户身份运行。其他用户可能会在某些时候访问系统,但是他们只有非常受控的权限,并且根本无法访问其他服务器。我还将向需要使用DBI和我编写的一组函数访问数据库的Perl脚本编写者公开一个限制存储过程API。

我的问题是如何保护具有连接字符串的配置文件的最佳方法?使用[4+]00权限的不同用户是否足够安全?应该对它们进行加密吗?这似乎只会将问题转移到另一个地方,使我担心在哪里存储加密密钥。我意识到Perl开发人员将需要拥有自己的连接字符串,因为他们只能执行数据库权限。


这是一个命令行应用程序还是一个网络应用程序? - Gary Richardson
我认为可以安全地假设在超过99%的情况下,PHP == 网络应用程序。 - Bill Karwin
这是一个合法的问题。系统的某些部分实际上使用CLI。 - Chris Kloberdanz
3个回答

8
如果机器确实是按照传统的Unix方式管理的,即J.随机用户并没有一直用su命令切换到root用户,那么我认为文件系统权限是您最好的选择。如果有人获得了未经授权的root访问权限,无论加密多少次都不会“保护”连接字符串。
我会将连接字符串文件标记为“脚本用户”的所有权,并按照您描述的方式给予它们访问权限。
(赞成您意识到在这个例子中加密连接字符串并不能为您带来任何好处。通过混淆来实现安全是适得其反的。)

我对自己的想法感到非常肯定。我将不会使用sudo。有时候安全性让我感到疯狂,因为它无法完美无缺。 - Chris Kloberdanz

2
这里有一个免费的Apache模块链接,可帮助管理密码存储的访问:http://uranus.it.swin.edu.au/~jn/linux/php/passwords.htm。对我来说,这似乎有点复杂,并需要在mod_php下运行PHP。即使如此,它仍不能解决未经授权的人可以读取您的密码文件的可能性。我认为你必须依靠文件权限,并相信未经授权的人没有能力sudo到你的PHP应用程序UID或root。

0

到目前为止,我最好的解决方案是将配置文件存储在加密分区中,这样直接访问计算机的人就无法通过连接驱动器到另一台计算机来获取密码,并使用文件系统权限,以便人们无法从操作系统本身内部读取文件。

不过,您需要了解,如果攻击者可以直接访问计算机,那么您几乎无法采取任何措施。如果它正在运行数据库服务器本身,则保护配置文件对他的影响不大,如果他可以修改数据库本身。只需确保一切都尽可能安全,您可能会没事的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接