2011-03-08 51 views
1

可能重複:
PHP storing password in cookiePHP - 在cookie中存儲密碼是否安全?

在登錄系統,如果用戶想要保持登錄狀態,則該密碼需要存儲在瀏覽器cookie。我已經瀏覽了許多關於SO的問題,並發現它沒有任何安全的將密碼存儲在瀏覽器cookie中。我不知道我是不是像

$string = 'snfcikkfbnvekrew'; 
    $salt = md5($passwrod.$string); 
    $password = md5(sha1(md5("$salt$string$salt"))); //or some other random sequence of encryption functions 

我只是想知道如果有人訪問cookie可以執行什麼樣的攻擊?

+1

這個問題的第一部分是這裏:http:// stackoverflow。com/questions/5232908/php-storage-password-in-cookie – awm 2011-03-08 14:06:55

+0

md5和sha1不是加密的。他們是散列函數。把他們想象成絞肉機。很容易吃牛和做漢堡包 - (幾乎)不可能拿漢堡包和牛。 – 2011-03-08 14:10:54

+2

所以,嗯,你以前的問題是回答不要這樣做;現在你正在尋求做這件事的最佳方式? – mario 2011-03-08 14:14:11

回答

10

爲什麼您需要在cookie中存儲密碼?爲什麼不使用其他用戶標識符,如內部用戶標識或某種某種臨時值?

「商店」和「密碼」是應該很少一起使用的兩個詞,並且當它們被使用時應仔細檢查。

+1

同意。你想存儲一個你知道並且可以很容易地重新計算但不能輕易被猜測的鹽漬散列或* something *。在登錄時使用您最喜愛的數學老師名字和月亮階段的登錄時間戳會同樣有效(並且*方式*風險較小)。 – CaseySoftware 2011-03-08 14:26:04

1

千萬不要嘗試在cookie中存儲密碼。它最好在cookie中存儲session_id,而在服務器上的會話中使用密碼。你無法想象黑客是如何輕鬆解碼你剛編碼的字符串的。

6

如果有人訪問cookie,即使它被散列,它們也會與您網站的用戶擁有相同的訪問權限,直到cookie過期。即使到期後,除非服務器上的密碼已更改,否則仍可使用相同的散列值進行登錄。

如果您希望允許他們在未登錄的情況下再次訪問密碼,請設置一個cookie與其他用戶帳戶隨機存儲的隨機令牌值。在每次訪問頁面和表單提交時,您都可以重新生成並存儲新的隨機令牌並將Cookie重置爲新值。這樣,存儲的值就會不斷變化,所以如果惡意用戶在運輸過程中扣留了cookie,它們可能在使用它時已經發生了變化。

最後,如果您打算爲以後登錄的任何值進行存儲,您應該通過SSL進行操作,並且只通過SSL發送cookie。

0

pasword本身並不需要存儲在cookie中,因爲您永遠無法檢索它並反轉它以證明它是正確的密碼。但如果你想使用密碼/電子郵件/ recId /任何你可以在內部檢查的算法組合,然後繼續,然後鹽你的字符串。我可能會使用一些加密的或可逆的UID的組合具有獨特和重新創建加密密鑰一起,所以我可以做的有問題的記錄的查詢和驗證,如

select 1 as loggedIn from userTable as u where u.uid=[cookie.uid] and md5(concat(u.email,u.accountcreated,u.lastlogin))=[cookie.hash] 
4

使用$_SESSION而不是炮製自己cookie的系統,而是使會議最後一段時間:

// keep user logged in 6 months 
session_set_cookie_params ($lifetime = 6 * 30 * 24 * 60 * 60); 
session_start(); 

if ($login == TRUE) { 
    $_SESSION["user"] = $user_name_or_id; 
} 
+1

(需要更多配置,不適合高訪客流量,因爲會話存儲會不斷增長。) – mario 2011-03-08 14:25:13

+3

公平地說,我們真的認爲OP是在談論高流量網站嗎?對於大多數目的而言,PHP的內置會話處理就好,並且自己滾動通常會浪費時間,或者更糟糕。 – philistyne 2011-03-08 14:38:27

+0

[不**使用長時間運行的會話](http://stackoverflow.com/questions/5009685/encoding-cookies-so-they-cannot-be-spoofed-or-read-etc/5009903#5009903) 。有更好的方法來做這件事,而不是讓會議持續很長時間... – ircmaxell 2011-03-08 15:48:18