2013-07-29 43 views
0

目前,我有我的web服務器文件夾中的兩個文件,一個被稱爲password.php。該文件包含一行:安全存儲PHP變量值

<?php $password = 'my_password' ?> 

其他PHP文件中包含的腳本,我只是想,如果正確的密碼參數被髮布到網頁來執行。我有它設置這樣

<?php require 'password.php'; 

if (isset($_POST["Password"]) & $_POST["Password"] == $password){ 
//Execute code... 
} 

else { 
echo "Error"; 
} 

?> 

現在的問題是,如果這確保不需要人手動張貼到它的信息在頁面上無法執行腳本的安全方式?有人告訴我,如果腳本處理器被禁用,服務器可以將原始腳本發送回服務器。這是否意味着人們可能會故意禁用www.mysite.com/directory/password.php上的處理器並查看$ password變量的值?

我被告知:「將password.php放在一個單獨的文件中,並將其存儲在www目錄上的目錄中,然後只能通過本地文件系統訪問,而不能通過來自外部的HTTP訪問「。

上述建議究竟意味着什麼?我應該做任何事情來使密碼更安全嗎?

+1

當您使用ftp(或用於傳輸文件的任何協議)連接到託管服務提供商時,文件夾結構的外觀如何?通常情況下,您將擁有/ yourUserName/public或public_html,您可以在其上載您應在yourdomain.com上提供的所有文件。你可以在公共目錄之外放置配置文件(實際上幾乎所有的服務器端文件)。這意味着如果我去yourdomain.com/config.php,它不在那裏。 – JimL

+0

部分回答:這意味着什麼*「...位於www目錄之上」,例如,將它放在您的'cgi-bin'中,而不是您的'public_html'文件夾。例如,我仍然使用'.txt'來存儲信息,並受到'.htaccess'文件的保護。 '.txt'文件存儲在我的'cgi-bin'文件夾的一個子文件夾中,並且也由'.htaccess'保護。 –

+1

不是保護網站的好方法。有一條規則。切勿在代碼中使用硬編碼密碼。有人可以訪問服務器上的文件,並可以讀取您的密碼 – sinaneker

回答

0

也許不是一個有用的答案,但一個很好的提示:真的再也不能使用硬編碼的PHP變量來存儲密碼。在Web目錄上方使用htpasswd,或將密碼存儲在數據庫中,以最小化方式進行散列。

0

怎樣的文件夾結構看,當你連接到ftp使用您的託管服務提供商(或任何協議使用傳輸文件)?通常你會有類似的東西

/yourUserName/public 
or 
/yourUserName/public_html 

在哪裏你上傳你應該在yourdomain.com可用的所有文件。你可以在公共目錄之外放置配置文件(實際上幾乎所有的服務器端文件)。這意味着如果我去yourdomain.com/config.php,它不在那裏。

我通常將我的整個應用程序的公共目錄之外的,所以它看起來是這樣的

/userName/app 
    controllers 
    models 
    templates 
    views 
    config.php 
    router.php 

/userName/public 
    css 
    js 
    index.php 

然後我通常做的index.php是這樣的:需要」 ../app/config.php 「;

2

要回答你的問題,你被告知是將其放置在網絡的可移動空間之外。這意味着如果您的Web服務器的文檔根目錄設置在/ var/www/site,那麼您應該將其存儲在該目錄之外,可能位於/ var/www/data中,因爲後一個目錄不可能被遠程HTTP客戶端。

幾點建議:

密碼不應以純文本形式存儲。它應該存儲爲散列。也許是這樣的:

<?php $password = some-hash; ?> 

其中「一些哈希」是使用的crypt()一樣crypt("password")產生的實際密碼的哈希。

那麼你的校驗碼是這樣的:

<?php require '../password.php'; 

if (isset($_POST["Password"]) && crypt($_POST["Password"]) == $password) { 
    //Execute code... 
} else { 
    echo "Error"; 
} 

?> 

以上僅僅是一個例子..請查閱關於crypt()函數的PHP手冊,以獲取有關如何使用此函數以獲得最佳安全性的更多信息。

爲了安全起見,存儲類型(PHP文件,數據庫等)並不重要。重要的是,密碼不能被瀏覽器訪問,並且它不是以明文形式存儲的。

+0

**僅供參考:**您保留與OP相同的語法錯誤。所以*理論上*,你的答案(代碼)也會拋出一條錯誤信息。看看你是否也可以找到他們。 (眨眼)。 P.s .:如果你收到任何降價,它不會來自我。 *只是說*。 –

+0

感謝您的支持,但是當我將其寫入本地系統中名爲「test2.php」的文件並運行「php -l test2.php」時,它將返回「test2.php中沒有檢測到語法錯誤」。根據PHP,IOW沒有語法錯誤。所以如果你能指出他們,我會很感激。 –

+0

你很受歡迎。但是,您是否已經完全測試了OP的(和您的)代碼?當然,它不會拋出一個錯誤,問自己爲什麼。 ;-) –