2014-02-22 34 views
1

召回我深知它的明文並不安全存儲登錄不過,我一直無法找到答案我的具體問題。我正在試圖做的是在召回數據庫的自動PHP腳本存儲服務器密碼,但我很偏執的數據庫被黑客攻擊,所以我需要確保他們不是在它遭受過黑客攻擊事件檢索。與我計劃的「最壞情況」情況一樣。密碼本身是隨機生成的。PHP MYSQL存儲密碼由PHP

+0

http://stackoverflow.com/questions/401656/secure-hash-and-salt-for-php-passwords/401684#401684 – Farkie

+0

這從用戶角度處理更多的密碼,首先給出正確的明文。謝謝你的方式:) –

+1

散列是一種方式,所以你不能檢索/重新調用密碼 - 這是什麼使他們更安全。如果你把它們放到數據庫中,這樣你就可以把它們拿出來,你就是在問問題。看看這個:http://www.php.net/manual/en/faq.passwords.php – timgavin

回答

1

如果你絕對,肯定有返回密碼使用它們來自動登錄到其他系統 - 最安全的方式來做到這一點(不,這不會像安全的,因爲僅僅是存儲鹽醃哈希)會到:


方法1

1:具有在服務器上的文件,其中包含用於產生加密密鑰的複製方法的文檔根之外 - 散列的口令創建時間或東西。

2:使用您從腳本生成的密鑰將密碼存儲在BLOB字段中,該字段使用AES_ENCRYPT加密。

3:確保你總是有一個SSL連接到任何系統,你登錄到使用這些密碼,而當PHP與數據庫通信,其無論是在同一臺機器/架或加密就是這麼做的線。


方法2(更好,但有附帶條件)

如果你可以存儲到您需要登錄到,您可以用其對應的公鑰來加密該服務器上的GPG私鑰密碼,然後將它們輸入到數據庫中。

然後將GPG加密的密碼傳遞給這些系統,並在需要時 - 然後他們可以解密密碼並使用它們。

這確實意味着您需要控制這些系統當然能夠實現GPG。

+0

謝謝我沒有想到使用GPG。現在就去做:) –

1

簡短的回答:

你不能。

稍長的答案:

你可以使用一個可逆加密算法。基本上,,而不是散列密碼(這是不可逆的),您加密的

然而,這提供了更多的保護,以明文存儲密碼。請記住,根據定義,任何可逆機制都可以顛倒過來,因此,如果您的數據庫被黑客入侵,那麼犯罪者可能能夠反轉您的密碼。使用PHP的password_hash()功能

1

哈希和鹽密碼,然後將其插入到MySQL。注:此使用每次不同的鹽,這使得它更加安全 - 自動,你不必鹽存儲在數據庫中,因爲PHP店給你。

// hash and salt... 
$password = password_hash($your_random_password, PASSWORD_DEFAULT); 

現在,在MySQL中對存儲的密碼檢查您的隨機密碼(從上面的步驟),看看它是否是合法的

if(password_verify($your_random_password, $row->passwd)) { 
    echo 'password is legit'; 
} else { 
    echo 'not legit'; 
} 

有關更多信息,請參閱本上用PHP散列。 http://php.net/manual/en/faq.passwords.php