【问题标题】:mysql passwords Connecting to MySQL with PHPmysql 密码 使用 PHP 连接到 MySQL
【发布时间】:2012-07-28 03:09:29
【问题描述】:

在使用 PHP 连接到 MySQL 的教程中,您会看到类似于下面的内容。

$pdo = new PDO('mysql:host=localhost;dbname=mydb', 'myuser','mypassword');

我在我的本地主机上有一个以这种方式工作的连接,但是为了让它生效,你对密码做了什么?你只是把它作为纯文本留在你的php文件中吗?还是有更安全的方法来处理这个问题?

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    如果他们查看源代码,没有人可以看到您的连接字符串,只能通过查看原始代码才能看到。我还将它放在一个单独的文件中,并将该文件包含在您的页面上。如果您需要更改密码,这也很有帮助,因为您不必编辑使用连接的每个页面 - 您只需编辑一个文件。

    或者,您可以在包含文件中包含一个连接字符串,并将其放在文档根目录之外。这会阻止人们使用浏览器或攻击您的 FTP 访问此文件。这将帮助保护您的纯文本密码,但如果有人获得/有权访问您的本地目录,仍然可以访问。为此,您可能需要配置一个 PHP 配置变量 open_basedir,它允许您的脚本与根目录之外的文件通信。当然,这一切都取决于您是否可以访问根目录下的文件夹,以及是否可以更改该配置变量。

    除此之外,没有什么可以做的。

    包含文件示例:

    创建一个名为conn.php 的文件并将您的连接存储在其中。

    $dbConn = mysql_connect($host, $user, $pass);
    mysql_select_db("dbName", $dbConn);
    

    在需要连接的页面上,像这样包含conn.php文件:

    <?php
    include("conn.php");
    if (!dbConn) {
        die('Sorry, our database did not load. Please try again later.');
        exit();
    }
    $result = mysql_query("...");
    ?>
    

    【讨论】:

    • 如果我们将文件放在文档根目录之外,如何访问根目录后面的文件夹?例如:我有一个index.php(查看文件)、index.js(js) 和check.php(php)。所有文件都在根目录下。用户可以单击index.php(查看文件)中的按钮,可以通过ajax 指向check.php。这将正常工作。如果我们在浏览器中输入www.mydomain.com/check.php的url,其他人可以查看该文件。如何避免这种情况?
    • @JustinJohn:您需要访问根目录的外部并将 AJAX 脚本存储在私有文件夹中。就像我在回答中提到的那样,您需要配置 open_basedir 以便您的 PHP 脚本可以访问此文件或文件夹。
    • 这里可以使用.htaccess 重写规则吗?如果可能,哪种方式(重写规则或 open_basedir)更安全?
    • @JustinJohn:很遗憾,我不熟悉 .htaccess,但您肯定需要设置 open_basedir,然后您的 PHP 页面才能与私有文件/文件夹通信。我也不确定您是否可以在共享主机上执行此操作,因为如果用户在设置变量时出错,这会对主机服务器造成潜在的安全风险。请务必仔细阅读相关文档。
    【解决方案2】:

    最终用户将永远无法看到 PHP 脚本中的文本。他们只看到代码输出的内容。你可以输入这样的密码,只要你从不做类似的事情:

    $mySecretPassIs='TheBoogeyManCometh';
    
    echo $mySecretPassIs;
    

    话虽如此,将连接详细信息放入脚本中通常更容易,根据需要从各个页面包含它,然后就可以使用了。这样做的好处是,如果您更改密码等,您只需在一处更改,您可以将这些包含的文件保存在一个安全的地方。

    【讨论】:

      【解决方案3】:

      真的没有办法解决。只需将该行放在 mysql_connect.php 文件中并 include() 它,所以它不在您的源页面上。

      这样,即使有人在查看您的来源,密码也不会立即可用。

      确保您的数据库权限仅允许该用户对数据库具有某些权限,因此即使密码被泄露,他们也只能修改该数据库中的内容。

      【讨论】:

      • 我支持这个想法。它还可以更轻松地共享您的代码,而无需记住先清除所有数据库连接命令。
      猜你喜欢
      • 1970-01-01
      • 2017-11-07
      • 2010-11-08
      • 1970-01-01
      • 2014-04-07
      • 1970-01-01
      • 2018-04-26
      • 2012-03-21
      相关资源
      最近更新 更多