2013-01-07 33 views
1

我最近在這裏發佈了一個問題;然而,在我得到的偉大答案中,我被告知我的連接查詢是不安全的,並且已被棄用。文檔根;登錄變數

$con = mysql_connect("localhost", "userX", "passX") or die('Could not connect to server'); 
    mysql_select_db("dbX", $con) or die('Could not connect to database');  
    $query="SELECT fieldX,filedX2 FROM tableX WHERE varX"; 
    $result=mysql_query($query); 
    while($row=mysql_fetch_array($result,MYSQL_ASSOC)) 

顯然,我學到的材料是舊的。所以我研究了這個問題,並且遇到了這兩個問題:

1. 「在實際操作中,最好將用戶名和密碼放在Apache Web服務器路徑之外的文件夾中,因此無法通過網絡「。

<?php 

include("connection.php"); 

$link = mysql_connect($connection_server, $connection_user,$connection_password); 
if (!$link) { 
die('Could not connect: ' . mysql_error()); 
} 
echo 'Connected successfully'; 
mysql_close($link); 

?> 


----- 

/* --- Connection Variables ---*/ 

$connnection_server = "[server]"; 

$connection_database = "[db]"; 

$connection_user = "[username]"; 

$connection_password = "[password]"; 

我知道這聽起來像一個愚蠢的問題(當然,我

2. 「的文件,是不是在web應用的文檔根目錄將用戶名和密碼」這是一個新手),但是什麼是文檔根? 「在文檔根目錄之外」和「在Apache Web服務器之外」是什麼意思?

現在,就我所知,我只是在MAMP上,但是當我在商業服務器上進行操作時,說Godaddy's,那是什麼意思?

另外,我假定

$connnection_server = "[server]"; 

$connection_database = "[db]"; 

$connection_user = "[username]"; 

$connection_password = "[password]"; 

在上面的例子中意味着這些變量是在一個單獨的文件(例如,connection_var.php),正確的嗎?

在此先感謝您的寶貴意見和幫助。

+0

這意味着您應該將文件放在您的Web服務器的www或public_html文件夾之外。我不確定godaddy是否允許你這樣做。對於變量,你可以將它們定義爲常量幷包含文件,並在你的代碼中使用它們,因爲它們不會經常改變。 – vodich

+0

謝謝,vodich。 – Jen

回答

3

的文檔根是最高的目錄(頂層),該瀏覽器可以直接從請求的文件或網頁。舉例如下:

http://example.com/index.php 

index.php在文檔根目錄下。瀏覽器沒有更高級別的請求。

http://example.com/images/mrcode.jpg 

mrcode.jpg不在文檔根,因爲它駐留在images目錄。

「在文檔根目錄外」和「在Apache Web服務器外」是什麼意思?

文檔根目錄之外是指存儲在此目錄之上的文件,因此不能直接由瀏覽器請求。例如您的目錄結構可能看起來像:

/websites/example.com/public_html/index.php 

如果你要在數據庫中存儲的憑據:

/websites/example.com/dbdetails.php 

這將是出(或以上)的文檔根目錄。將連接憑據存儲在文檔根目錄中並不被視爲漏洞,但將它們存儲在外部可能會稍微好一些。 PHP仍然可以訪問文檔根目錄之上的文件(假設您有權限)。共享主機通常可以訪問文檔根目錄上的一個級別。

您的直接問題是您正在使用已棄用的mysql_*庫。問題在於它正在從較新版本的PHP中刪除,因此如果您繼續使用它,您的應用程序將最終變得完全無法使用。 MySQLiPDO庫也提供Prepared Statements,應該使用它們來代替轉義方法來防止SQL Injection,因爲它們提供更高的安全性。見here for a good PDO tutorial。如果您被告知您的查詢不安全,那麼它們可能包含SQL Injection漏洞。

+0

真棒,清晰,非常翔實的答案。如果我有要求的「聲譽」,我會把它投票。謝謝,MrCode。 – Jen