2012-07-28 107 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