2010-11-04 91 views
1

我正在开发一个Web应用程序,它将要求在PHP和JavaScript中使用不同脚本中的MySQL数据库。我习惯了连接到db的“标准”概念,但我想知道如何让这些字符串远离窥探。我的假设是,如果一个脚本包含连接信息,那么它可以用来进入数据库本身,并对用户信息和其他重要数据造成严重破坏。数据库连接安全:保护脚本中连接信息的最佳实践?

有什么建议吗?

+1

JavaScript没有直接连接到数据库服务器,是吗? – Gumbo 2010-11-04 17:42:38

+0

我正在考虑沿着ajax的线条。授予我目前对这项工作如何极少的知识。 – Eric 2010-11-04 18:36:25

回答

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的有些可选的,如果您在您的系统不安全的第三方或用户脚本等,通过它们你做出ENV。其他变量不可用。

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

作为一个附注,请看看PHP PDO,而不是使用坏的'mysql_connect()。你可以搜索无数的原因。

+0

你能指点我的任何例子吗? – Eric 2010-11-04 18:37:03

+0

谢谢,我会深入探讨这一点。现在应该有点容易,我有一个参考点:) – Eric 2010-11-05 12:04:38

+0

我把它投下来,因为隐藏在环境变量中的东西实际上比将它们存储在文件中更糟。文件至少拥有所有权/许可来保护它们。环境变量是由于子继承继承它们而造成的危险,所以其他程序可能会在您知道的情况下访问它们。如果您的用户/ db/pass作为环境变量可用于apache,您的所有页面都可以访问它们,并且它们不需要。如果任何页面存在安全漏洞,那么这是信息泄漏的主要潜在可能。 – Marcin 2010-11-05 13:36:03

0

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