2012-11-05 64 views
1

我做了一個網站,我只顯示來自我的數據庫表的項目,我將變量從一個頁面傳遞給另一個顯示某些項目,沒有添加,刪除或編輯我的表格項目在我的網站只是顯示信息。我是否從sql注入保護我的網站?

$aaa = _POST['aaa']; 

$databasehost = "localhost"; 
$databasename = "mydb"; 
$databaseusername = "user"; 
$databasepassword = "password"; 

// Connect to the database server 
$dbcnx = @mysql_connect($databasehost, $databaseusername, $databasepassword); 
if (!$dbcnx) { 
echo("<font color='red'><P>can't connect to server.</P></font>"); 
exit(); 
    } 
// Select the database 
if (! @mysql_select_db($databasename)) { 
echo("<font color='red'><P>can't connect to db </P></font>"); 
exit(); 
    } 

$aaa = mysql_real_escape_string($aaa) 

// and with $aaa I do my query 

我已閱讀,保護我的變量與mysql_real_escape_string()我停止任何注射到我的查詢的,但我覺得容易有:

$databasehost = "localhost"; 
$databasename = "mydb"; 
$databaseusername = "user"; 
$databasepassword = "password"; 

我只是偏執或者是有辦法保護這個連接到y服務器和數據庫的信息?

+3

請不要使用'mysql_ *'函數編寫新代碼。他們不再被維護,社區已經開始[棄用流程](http://goo.gl/q0gwD)。看到[紅色框](http://goo.gl/OWwr2)?相反,您應該瞭解[準備好的語句](http://goo.gl/orrj0)並使用[PDO](http://goo.gl/TD3xh)或[MySQLi](http://php.net/ mysqli的)。如果你不能決定哪些,[這篇文章](http://goo.gl/YXyWL)會幫助你。如果你選擇PDO,[這裏是很好的教程](http://goo.gl/b2ATO)。另請參閱[爲什麼我不應該在PHP中使用mysql函數?](http://goo.gl/J5jAo) – Daedalus

+0

上面是一個罐頭響應,但我相信它適用於您的問題。 – Daedalus

+6

這行'$ aaa = _POST ['aaa']'是保護任何人使用您的網站。 – alex

回答

4

任何人都沒有辦法在沒有訪問服務器的情況下查看數據庫連接信息(因爲PHP在服務器上執行並且不會發送到用戶的瀏覽器)。這就是說,如果你擔心你可能想考慮把這些變量放在一個配置文件中並加密它們。

+0

感謝您的快速響應!你知道或者有一個關於配置文件應該是什麼樣子的示例,以及如何從我的web文件調用它? – zvzej

+0

http://security.stackexchange.com/questions/15662/is-it-secure-to-centralize-database-information –

1

如果你的目標是嚴格防止通過$ aaa變量注入,你應該沒問題。正如@MikeG指出的那樣,但是您應該將連接信息移動到Web根目錄之外的單獨配置文件中以提高安全性(如果有人獲得您的數據庫證書,則不需要擔心注入)。

+1

BTW:_POST應該是$ _POST –

+0

感謝您對$ POST的評論我想我打字快速,但在單獨的配置文件,你知道或有一個樣本應該是什麼樣子,以及如何從我的網頁文件調用它? – zvzej

+1

您可以直接將變量註釋到單獨的PHP文件中,並使用原始文件中的http://php.net/manual/en/function.require-once.php調用該文件。 –

1

它應該沒關係,但是如果你關心它,只需將字符串mysql_real_escape_string傳遞給數據庫的所有值轉義並對數值取intval/floatval。

這不是完美的安全性,但它比不這樣做更好。