當談到記得我餅乾,有2種不同的方法:用於「記住我」Cookie的哈希或標記?
哈希
的記得我餅乾店,可以識別用戶的字符串(即用戶ID)和一個字符串,可以證明已識別的用戶是它僞裝成的用戶 - 通常是基於用戶密碼的哈希。
令牌
的記得我餅乾店隨機(無意義的),即與在令牌的記錄表,用於存儲用戶ID對應而獨特的字符串。
哪種方法更安全,有什麼缺點?
當談到記得我餅乾,有2種不同的方法:用於「記住我」Cookie的哈希或標記?
哈希
的記得我餅乾店,可以識別用戶的字符串(即用戶ID)和一個字符串,可以證明已識別的用戶是它僞裝成的用戶 - 通常是基於用戶密碼的哈希。
令牌
的記得我餅乾店隨機(無意義的),即與在令牌的記錄表,用於存儲用戶ID對應而獨特的字符串。
哪種方法更安全,有什麼缺點?
如果可能,您應該使用隨機生成的令牌。當然,缺點是您必須編寫一些額外的代碼來存儲和使用它們在服務器端,所以這可能不適用於所有Web應用程序。但是,從安全的角度來說,這具有明顯的優勢:
攻擊者無法生成用戶ID令牌,但他絕對可以生成散列。這是一個很大的問題,即使你在生成哈希函數時使用鹽(你應該這樣做),如果鹽會進入錯誤的手中,你的用戶會被搞砸。
給出這些令牌可以讓您的用戶(或者您的管理員,如果需要的話)「註銷」他們可能想要擺脫的某些會話。這實際上是一個很酷的功能,谷歌和Facebook使用它。
所以,如果你有時間和預算:代幣,絕對。
如果令牌每次產生一個隨機字符串,它們會更安全。
另一方面,記住我的重點是,用戶不必再次登錄,所以除非他們單擊註銷,否則很少需要重新生成新的令牌,除非過期。
我想你應該堅持令牌和lazyness不犧牲安全性:-P
通常你保持令牌 - >用戶映射在服務器端固定。因此,最終你的安全是基於確保令牌安全並確保它的生命週期受到控制(例如,它只會在從與原始憑證提供者所使用的IP相同的IP給予您時纔有效 - 同樣,只是一個例子)
Security of token based authentication
希望這有助於。
直覺表明一次性隨機字符串必須比算法產生的確定性字符串更安全,但我想你想要一些引用。無論如何,直覺並不總是正確的。 –
爲什麼標記爲Ruby? –
對於任何發現此問題的人,請閱讀:[持續登錄Cookie最佳實踐](http://fishbowl.pastiche.org/2004/01/19/persistent_login_cookie_best_practice/)。基本上,您還需要以與散列密碼相同的方式對令牌進行散列。 –