2010-01-02 115 views
0

正在存儲用戶名 & 密碼的cookie中的用戶良好的做法?我真的很想知道像(Facebook,digg,twitter)這樣的大網站如何處理這個問題。我的代碼是這樣的:使用Cookie的安全會員登錄

<?php 

$username = mysql_real_escape_string($_POST['username']); 
$password = md5($_POST['password']); 

?> 

每次成功登錄後,我存儲$username$password(MD5)在cookie中。並重新生成會話ID與session_regenerate_id()


,並以我檢查,如果一個登錄會話中存在用戶進行身份驗證,否則我驗證的cookie。

任何想法?由於

回答

2

我有點困惑 - 你使用PHP會話還是cookies?

如果您在會話中存儲($_SESSION['username'] = 'Tom'等)的數據,該數據不存儲在用戶的cookie。

如果你存儲在一個單獨的cookie(這樣的事情自動登錄)的數據,你可能希望存儲不同,隨機ID代替,並且查找用戶ID的數據庫表。

autologins 
---------- 
key (random hash) 
user_id 
expires 
+0

我驗證cookie,然後設置會話。如果一個會話已經設置,我直接使用它。你的自主論思路很好。謝謝。 – MoeAmine 2010-01-02 13:02:45

0

只是一個MD5是不夠的,你至少應該包括隨機的「鹽」(字符的小的隨機字符串),你在你的數據庫存儲。

編輯:順便說一句,你存儲密碼明文或加密?這可能是一個更大的安全風險。

+0

好吧,我有一個關於鹽漬的想法..但它足夠安全的將它存儲在cookie中? – MoeAmine 2010-01-02 12:42:08

+0

僅存儲在MD5中。但我會改變這個策略。 – MoeAmine 2010-01-02 13:17:26

0

標準的做法是給用戶一個會話ID在Cookie中,無論是自己或使用PHP會議。將用戶名和密碼哈希存儲在cookie中仍然由一些網站完成,但我更喜歡前者。它允許您爲用戶提供更多的登錄控制權,例如他們可以查看他們擁有多少會話以及來自哪個IP--請參閱GMail以獲取一個很好的示例。

在鹽和散列的問題,您應該存儲在數據庫中醃密碼哈希值。理想情況下,每個用戶的鹽應該不同。如果您的數據庫被盜或暴露出來,這將使攻擊者很難獲取密碼(如果他們都使用相同的鹽,他們可以爲該鹽生成彩虹桌,這需要很長時間,但會讓他們然後很快破解密碼)。爲了安全,鹽應該還包含一些非字母數字字符,如%$ & ^。

+0

我沒有任何關於在cookie中處理sesion ID的背景,但是我正在處理的項目並不需要爲用戶提供他們的ip,會話等等。正如你所說的。感謝醃製戰略的解釋。 – MoeAmine 2010-01-02 13:16:05

0

Joel L的答案是一個很好的答案。我唯一要補充的是,您可以添加一些標識用戶的額外信息,使其更安全,而不是隨機ID。

例如,使用用戶IP地址和鹽的散列,爲竊取或嗅探用戶安全Cookie的用戶提供額外的安全性。

我懷疑TWitter使用這樣的東西,這就是爲什麼你一次只能從一臺計算機永久登錄到Twitter。