数据库连接安全性:保护脚本中的连接信息的最佳实践?

时间:2010-11-04 17:38:07

标签: php database security authentication

我正在开发一个Web应用程序,需要在PHP和JavaScript的不同脚本中使用MySQL数据库。我已经习惯了连接到db mysql_connect("host", "username", "password")的“标准”概念,但我想知道如何使这些字符串远离窥探。我的假设是,如果一个脚本包含连接信息,那么这可以用于进入数据库本身并对用户信息和其他重要数据造成严重破坏。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

如果您拥有所需的权限,请尝试将连接信息保存在环境变量中,使用它们进行连接,然后取消设置。

我记得在一些书籍和在线资源中遇到过这种情况,但目前前几页Google网页上没有任何内容。

首先,在PHP之外设置两个环境变量,如PHP_MYSQL_USERPHP_MYSQL_PWD。请注意,您可能需要重新启动Web服务器,甚至是操作系统才能使其处于活动状态。

然后,在PHP中:

mysql_connect('localhost', getenv('PHP_MYSQL_USER'), getenv('PHP_MYSQL_PWD'));
putenv('PHP_MYSQL_USER=');
putenv('PHP_MYSQL_PWD=');

putenv在某种程度上是可选的,如果您在系统中包含不安全的第三方或用户脚本等,通过使用它们来创建环境。其余执行的变量不可用。

通过使用这种方法,即使有人掌握了您的脚本,他们也不会知道您的数据库凭据。但请记住,如果有人将脚本/ shell上传到您的服务器,他们仍然可以看到这些变量。您可以将上载目录保存在PHP不可执行的完全不同的区域中,和/或具有较低的权限。您必须检查上传的安全性,此机制以及任何其他服务器的安全性。

作为旁注,请查看PHP PDO而不是使用错误的mysql_connect()。你可以搜索无数的原因。

答案 1 :(得分:0)

如果某人有权访问您脚本的源代码以查看这些密码,那么您已经遇到了大麻烦。确保这些脚本具有正确的文件权限等(即只有那些需要它的人才能阅读)。