【发布时间】:2012-07-28 03:09:29
【问题描述】:
在使用 PHP 连接到 MySQL 的教程中,您会看到类似于下面的内容。
$pdo = new PDO('mysql:host=localhost;dbname=mydb', 'myuser','mypassword');
我在我的本地主机上有一个以这种方式工作的连接,但是为了让它生效,你对密码做了什么?你只是把它作为纯文本留在你的php文件中吗?还是有更安全的方法来处理这个问题?
【问题讨论】:
在使用 PHP 连接到 MySQL 的教程中,您会看到类似于下面的内容。
$pdo = new PDO('mysql:host=localhost;dbname=mydb', 'myuser','mypassword');
我在我的本地主机上有一个以这种方式工作的连接,但是为了让它生效,你对密码做了什么?你只是把它作为纯文本留在你的php文件中吗?还是有更安全的方法来处理这个问题?
【问题讨论】:
如果他们查看源代码,没有人可以看到您的连接字符串,只能通过查看原始代码才能看到。我还将它放在一个单独的文件中,并将该文件包含在您的页面上。如果您需要更改密码,这也很有帮助,因为您不必编辑使用连接的每个页面 - 您只需编辑一个文件。
或者,您可以在包含文件中包含一个连接字符串,并将其放在文档根目录之外。这会阻止人们使用浏览器或攻击您的 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,其他人可以查看该文件。如何避免这种情况?
最终用户将永远无法看到 PHP 脚本中的文本。他们只看到代码输出的内容。你可以输入这样的密码,只要你从不做类似的事情:
$mySecretPassIs='TheBoogeyManCometh';
echo $mySecretPassIs;
话虽如此,将连接详细信息放入脚本中通常更容易,根据需要从各个页面包含它,然后就可以使用了。这样做的好处是,如果您更改密码等,您只需在一处更改,您可以将这些包含的文件保存在一个安全的地方。
【讨论】:
真的没有办法解决。只需将该行放在 mysql_connect.php 文件中并 include() 它,所以它不在您的源页面上。
这样,即使有人在查看您的来源,密码也不会立即可用。
确保您的数据库权限仅允许该用户对数据库具有某些权限,因此即使密码被泄露,他们也只能修改该数据库中的内容。
【讨论】: