2013-09-22 30 views
5

我試圖使用這裏列出的系統實施「記住我」實用工具:Improved persistent login cookie實施記得我令牌和一系列跨越多個設備

然而,有在這裏對我來說是邏輯的問題,並在想,如果任何人都可以爲我解決這個問題。

  • 給用戶一個會話ID。這是一個隨機生成的字符串,在用戶帳戶的整個生命週期中爲 。

  • 給用戶一個令牌ID。這是一個隨機生成的字符串和 重新創建每次用戶成功登錄的時間。

這兩個值都存儲在用戶的計算機上,並在數據庫中籤餅乾。

想法是,如果有人設法欺騙用戶的令牌和系列並以用戶身份登錄,那麼他們將生成新的令牌ID。下一次合法用戶嘗試登錄時,他們將有一個匹配的系列,但是一個無效的令牌,從而通知系統發生了安全漏洞,並且可以採取任何必要的操作(清除用戶的令牌)。

這太好了。但是,當用戶嘗試從多個設備或瀏覽器使用我的應用程序時會發生什麼?假設用戶使用Chrome登錄我的服務並檢查記住我。下次他們通過Firefox登錄並選擇記住我。一個新的令牌將被生成,以便下次用戶嘗試使用Chrome登錄時會觸發錯誤的盜用 - 不是嗎?

如果是這種情況,我該如何更可靠地實施此解決方案?我很清楚,基於cookie的授權本質上不太安全,並且不允許cookie授權用戶執行任何破壞性行爲,例如購買。

回答

4

原來的崗位「改良永久登錄cookie」是指,(在這裏找到:http://fishbowl.pastiche.org/2004/01/19/persistent_login_cookie_best_practice/)指出:

該Cookie應該包括用戶的用戶名,然後是 分隔符,其次是一些大的隨機數(128位 似乎令人難以置信的大到可以接受)。服務器保留 一個數字 - >用戶名關聯表,查找該表以驗證該cookie的有效性爲 。如果Cookie提供一個隨機數字和 在表格中相互映射的用戶名,則接受的登錄名爲 。

在任何時間,用戶名可以映射到幾個這樣的數字

因此,用戶可以在同一時間許多長期存在的令牌。

+1

謝謝你現在有道理。我將擁有一堆令牌,並在未使用時給他們30天的有效期,因此我不會用冗餘數據填充數據庫。 –