2
我有一個網站,用戶可以在網站上選擇「記住我」(AKA設置cookie)並根據本網站的建議,我將數據庫中的密碼加密轉換爲php的password_hash()
函數。現在,我不能只比較任何舊的散列,因此我使用php的password_verify()
。密碼驗證需要明文和密碼哈希。Cookie加密/解密
如何將用戶的密碼存儲在瀏覽器cookie中而不是明文?
我有一個網站,用戶可以在網站上選擇「記住我」(AKA設置cookie)並根據本網站的建議,我將數據庫中的密碼加密轉換爲php的password_hash()
函數。現在,我不能只比較任何舊的散列,因此我使用php的password_verify()
。密碼驗證需要明文和密碼哈希。Cookie加密/解密
如何將用戶的密碼存儲在瀏覽器cookie中而不是明文?
將密碼存儲在cookie本身是一個非常糟糕的主意,不要這樣做。
在一個很高的水平,我想:
md5
),它由一個獨特的夫婦(但一致的)的屬性此用戶所以我們來簡單介紹一下。假設$hash
是存儲在數據庫中的密碼哈希,並且此用戶還有一個$userId
和$username
變量。
我會生成一個cookie,看起來是這樣的:
$token = md5($userId . $username . $hash);
$cookie = $userID . "|" . $token; // 1|XXXXXXXX
現在,當用戶訪問您的網站,檢索這個cookie:
$parts = explode("|",$cookie);
$userId = $parts[0];
$token = $parts[1];
現在你知道用戶是誰聲稱是,但你需要驗證。
從數據庫中提取用戶記錄,然後重新生成令牌並進行比較。
// Assuming you just ran a SELECT query, and fetched the result into `$row`
$dbToken = md5($row['userId'] . $row['username'] . $row['hash']);
if($token == $dbToken) {
// The user is who he claims to be! Log them in
} else {
// The cookie token didn't match our re-generated token, don't trust this cookie
}
有意義嗎?您可能需要針對您的情況稍微修改一下。希望這可以幫助你至少朝好的方向前進。
我有這麼長的回答說同樣的事情,然後你說得更好。 +1很好的答案。 –
我認爲這工作(因爲它在設置cookie),我唯一的問題是,我驗證cookie的方式並不真正起作用。 [代碼](http://pastebin.com/2nGTDnF8)(請參見突出顯示的行) – mrkirby153
@ mrkirby153很高興看到該方法似乎適用於您的情況。至於專門調試你的類,開始做'print_r($ _ COOKIE)'看看你實際上有什麼。也許cookie數組並不完全符合你的期望?也許'verifyDatabase'沒有被調用?我認爲您可以根據代碼的工作方式進行一些常規的PHP調試,這與cookie標記特有的工作方式無關。 – jszobody