PHP5数据库密码可以被盗吗?

时间:2011-08-14 20:36:17

标签: php database passwords

大家好我是php的新手,我发现对于数据库连接,你直接将密码输入到.php文件中(“mysql_connect($ host,$ user,$ pass,$ db”)。我读到了关于哈希的问题我将使用散列,但问题是用户是否可以下载预编译的.php文件并查看我的源代码,因此获取我的数据库密码。如果他写“domain / home”我有一个index.php文件可以防止用户进入目录。 提前谢谢。

4 个答案:

答案 0 :(得分:3)

您无法散列MySQL密码并仍然连接到数据库。如果您可以使用散列密码进行连接,则攻击者可以获得散列并连接。如果您将用户的密码存储在数据库中,那么散列(在盐渍时更好)是一件好事,但在存储数据库凭据时实际上并不可用。

大多数人,而不是直接在其主应用程序文件中使用所有凭据进行mysql_connect调用,至少会require来自包含凭据的文档根目录之外的配置文件。

如果您在文档根目录之外有config.php这样的文件,那么除非他们能够在服务器中找到目录遍历漏洞,否则无法远程访问config.php

答案 1 :(得分:3)

  

用户可以下载预编译的.php文件

不是通过mod_php本身,但如果Web应用程序(或Web服务器)中存在某些安全漏洞,那么有人当然可以读取随机PHP文件。如果攻击者可以闯入Web服务器,那么他们可以检索数据库密码 - 是的,即使您将其存储在Web根目录之外。

你应该假设有一天会发生这种情况;尽量限制此类信息泄露的后果。专注于限制您连接的数据库帐户。 Web应用程序不应连接到对数据库中的每个表具有读/写访问权限的数据库帐户。您应该限制数据库用户,使其只能读取需要读取的表,并且只写入需要写入的表。

使用存储过程是添加额外安全层的好方法,因为您可以在数据库本身中执行有关允许站点用户执行哪些操作的检查。然后,Web DB用户应该只能通过过程与数据库进行交互。这将限制攻击者即使能够发出随机数据库查询也可以采取的行动。

答案 2 :(得分:3)

正如其他回答者所提到的,通常这应该不是问题,因为用户将无法看到PHP代码。但是,如果您计划与其他人共享代码,在将用户名和密码发送给某人之前删除用户名和密码可能会有点麻烦(如果您忘记他们会知道您的密码)。

因此,您可以将信息放在一个文件中,然后将其读入PHP。例如,在主目录中创建一个名为mysql.ini的文件,并在其中包含以下信息:

host     = "127.0.0.1"
username = "user"
password = "pass"
database = "db"

然后,将其读入PHP并连接,如下所示:

$settings = parse_ini_file('/home/mysql.ini');
mysql_connect($settings['host'], $settings['username'], $settings['password'], $settings['database']);

请记住,确保该文件位于无法公开访问的网络服务器部分,否则人们将能够阅读您的登录信息。

答案 3 :(得分:2)

查看你的php页面的源代码 - 看看任何php代码?在发送到用户浏览器之前,您不应该由服务器运行它。仍然建议您将带有登录详细信息的文件放在Web根目录下,以防服务器出现问题并且不解析php文件。