2011-11-25 80 views
10

當談到記得我餅乾,有2種不同的方法:用於「記住我」Cookie的哈希或標記?

哈希
記得我餅乾店,可以識別用戶的字符串(即用戶ID)和一個字符串,可以證明已識別的用戶是它僞裝成的用戶 - 通常是基於用戶密碼的哈希。

令牌
記得我餅乾店隨機(無意義的),即與在令牌的記錄表,用於存儲用戶ID對應而獨特的字符串。

哪種方法更安全,有什麼缺點?

+6

直覺表明一次性隨機字符串必須比算法產生的確定性字符串更安全,但我想你想要一些引用。無論如何,直覺並不總是正確的。 –

+0

爲什麼標記爲Ruby? –

+1

對於任何發現此問題的人,請閱讀:[持續登錄Cookie最佳實踐](http://fishbowl.pastiche.org/2004/01/19/persistent_login_cookie_best_practice/)。基本上,您還需要以與散列密碼相同的方式對令牌進行散列。 –

回答

9

如果可能,您應該使用隨機生成的令牌。當然,缺點是您必須編寫一些額外的代碼來存儲和使用它們在服務器端,所以這可能不適用於所有Web應用程序。但是,從安全的角度來說,這具有明顯的優勢:

  1. 攻擊者無法生成用戶ID令牌,但他絕對可以生成散列。這是一個很大的問題,即使你在生成哈希函數時使用鹽(你應該這樣做),如果鹽會進入錯誤的手中,你的用戶會被搞砸。

  2. 給出這些令牌可以讓您的用戶(或者您的管理員,如果需要的話)「註銷」他們可能想要擺脫的某些會話。這實際上是一個很酷的功能,谷歌和Facebook使用它。

所以,如果你有時間和預算:代幣,絕對。

1

如果令牌每次產生一個隨機字符串,它們會更安全。

另一方面,記住我的重點是,用戶不必再次登錄,所以除非他們單擊註銷,否則很少需要重新生成新的令牌,除非過期。

我想你應該堅持令牌和lazyness不犧牲安全性:-P

4

通常你保持令牌 - >用戶映射在服務器端固定。因此,最終你的安全是基於確保令牌安全並確保它的生命週期受到控制(例如,它只會在從與原始憑證提供者所使用的IP相同的IP給予您時纔有效 - 同樣,只是一個例子)

Security of token based authentication

希望這有助於。