2010-11-16 150 views
0

我在使用simple login class作爲起點構建CodeIgniter應用程序的登錄部分。這一切工作正常,但我不確定加密類型和使用哪種加密類型之間的差異。安全登錄PHP CodeIgniter

我已經使用用戶的密碼的crypt()函數作爲鹽(通過MD5),像這樣:

$pass == crypt($_POST['login_password'], md5($_POST['login_password']))

是這種方法確定,還是有一個明顯的錯誤在這種方法?這看起來很安全,因爲密碼或salt都不存儲在數據庫中。或者有點顯而易見?

在此先感謝。

+0

可能想修復您的鏈接;) – 2010-11-16 20:26:52

回答

3

http://php.net/manual/en/faq.passwords.php

這是實現密碼的正確方法。

下面的一切都是無關緊要的。


你所擁有的權利有什麼,一個簡單的

$pass = md5($_POST['login_password'] . "somerandomchars"); 

除非需要很高的安全度在大多數情況下就足夠了。

如果您使用CodeIgniter,我強烈建議您查看TankAuth身份驗證插件。

+0

Hi @castis!感謝您的回答。我剛開始時只使用了md5散列,但在印象中,應該使用鹽來防止使用彩虹表?感謝您的鏈接,看起來不錯,我會檢查出來。 – Robimp 2010-11-16 17:07:27

+0

是的,你應該使用鹽來保護密碼。看看這個其他SO條目。 http://stackoverflow.com/questions/401656/secure-hash-and-salt-for-php-passwords – castis 2010-11-16 17:08:53

+0

啊,看起來像一個非常徹底的線程。謝謝,在路上的綠色刻度... – Robimp 2010-11-16 17:12:24

1

在現代應用中,網站密碼不是使用crypt存儲的。對salt使用散列值要安全得多(如果有人闖入你的數據庫,那裏沒有密碼,只有密碼的散列是他們不能用來登錄的),並且crypt確實不是很安全。不幸的是MD5也有問題,所以我建議使用SHA512作爲散列。

3

還有codeigniter提供的內置加密庫。你在你的配置(應用程序/配置/ config.php文件)$配置[ 'encryption_key']

即使它可以被 「解密」 提供的 「鹽」,它是相當安全的:

$this->load->library('encrypt'); 
//encryption 
$pass = $this->encrypt->encode($this->input->post('login_password')); 
+0

我不知道,這看起來像一個不錯的選擇。 – Robimp 2010-11-16 17:18:24

+3

這裏唯一的問題是,如果你擔心安全問題,如果有人進入你的系統足夠遠以查看數據庫記錄。有機會他們也可以找到一個加密密鑰,在這一點上:所有這些密碼都可以通過CI的加密庫​​輕鬆實現。始終哈希密碼,從不加密它們。 – castis 2010-11-16 17:20:45

+2

加密是無意義的,因爲它可以被解密。 MD5哈希至少必須被破解,但使用鹽,甚至可能使sha1變得更安全。 – 2010-11-19 09:36:21

1

使用$pass = do_hash($this->input->post('password')); 並在您的autoload.php中包含security_helper