【问题标题】:PHP5 database password and can it be stolen?PHP5数据库密码会被盗吗?
【发布时间】:2011-10-26 22:29:09
【问题描述】:

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

【问题讨论】:

  • 离题:mysql 扩展已过时,即将弃用。切换到mysqli或PDO。

标签: php database passwords


【解决方案1】:

正如其他回答者所提到的,通常这应该不是问题,因为用户将无法看到 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']);

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

【讨论】:

    【解决方案2】:

    您不能对 MySQL 密码进行哈希处理,但仍然可以连接到数据库。如果您可以使用散列密码进行连接,则攻击者也可以获取散列并进行连接。如果您将用户的密码存储在数据库中,散列(加盐时甚至更好)是一件好事,但在存储数据库凭据时并不真正可用。

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

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 谢谢大家的回答,他们很有帮助:)
        猜你喜欢
        • 1970-01-01
        • 2013-07-30
        • 1970-01-01
        • 2023-03-04
        • 1970-01-01
        • 2019-11-01
        • 1970-01-01
        • 2018-04-19
        • 2013-01-02
        相关资源
        最近更新 更多