2012-07-28 81 views
1

在使用PHP连接到MySQL的tutrorials中,您会看到与下面类似的内容。mysql密码使用PHP连接到MySQL

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

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

回答

4

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

或者,您可以在包含文件中包含连接字符串,并将其放在文档根目录之外。这会阻止人们使用浏览器访问此文件,或者他们攻击您的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("..."); 
?> 
+0

如果我们将文件放在文档根目录之外,如何访问根目录下的文件夹?例如:我有一个'index.php'(查看文件),'index.js'(js)和'check.php'(php)。所有文件都在根目录下。用户可以点击'index.php'中的按钮(查看文件)可以通过ajax导致'check.php'。这将工作正常。如果我们使用'www.mydomain.com/check.php'在浏览器中输入url,其他人可以查看该文件。如何避免这种情况? – 2012-07-28 04:42:55

+0

@JustinJohn:您将需要访问根外部并将AJAX脚本存储在私人文件夹中。就像我在我的回答中提到的那样,您需要配置** open_basedir **,以便您的PHP脚本可以访问此文件或文件夹。 – TheCarver 2012-07-28 04:51:21

+0

这里可以使用.htaccess重写规则吗?如果可能的话,哪种方式(重写规则或open_basedir)更适合安全? – 2012-07-28 04:59:25

3

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

$mySecretPassIs='TheBoogeyManCometh'; 

echo $mySecretPassIs; 

话虽如此,它往往更容易把你的连接细节中的脚本,把它作为你从不同的页面需要然后离开你。好处是,如果您更改密码或类似内容,您只需在一个地方更改它,并且可以将这些包含的文件保存在一个安全的地方。

2

真的没有办法绕过它。只需将该行放入一个mysql_connect.php文件中即可,因此它不在您的源页面上。

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

确保数据库的权限只允许对数据库的用户一定的特权,所以即使密码被泄露,他们只能在一个数据库中修改的事情。

+0

我支持这个想法。它还可以更轻松地共享代码,而无需先记住清除所有数据库连接命令。 – octern 2012-07-28 04:00:40