我正在嘗試爲用戶編寫一個簡單的HTTP記住我的身份驗證系統。HTTP記住我的身份驗證
我的用戶可以表示爲這種
{
"email" : "[email protected]",
"password" : "8EC41F4334C1B9615F930270A4F8BBC2F5A2FCD3" // sha1 hash of password
}
所以我的想法是,我需要建立一個cookie,具有無限(很長)的到期時間,將持有某種類型的信息,使我從數據庫讀取用戶,因此登錄用戶。
我的第一個想法是隻是簡單的存儲email:password
字符串作爲一個cookie。我認爲這樣會很好,因爲沒有人能真正生成除用戶本身之外的其他類型的信息,並且我可以通過簡單比較基於數據庫內容的username
和password
來輕鬆檢索用戶。
但是後來我覺得這不太好。它將密碼摘要轉換爲第二個密碼,該密碼存儲在清除中,並在每個請求中通過網絡傳遞。
因此,我想也許我可以在用戶每次登錄時生成一個signature
,這基本上是一個隨機散列,它直接存儲在數據庫的用戶對象中。
用戶登錄後,它生成存儲的簽名,並且cookie保存此簽名。無論您何時訪問網站,網站都會檢查哪個用戶擁有該特定簽名並登錄該用戶。登出將有效地清除cookie,新登錄將生成新的隨機簽名。
此方法是否考慮到任何其他漏洞?
我知道,我也許應該使用已經爲此做了一個庫,但是這僅僅是簡單地在網絡安全性的練習。
沒有用戶永遠不會信任。甚至不信任用戶。 – mauris 2011-06-07 15:21:15