2013-01-19 98 views
2

當用戶登錄並檢查「記住我」框時,我生成一個密鑰(在MD5上非常隨機的數字),並保存在它的cookie中。如果用戶沒有登錄,我的代碼檢查「記住我的密鑰」cookie,如果它與用戶匹配,那麼他已登錄。Remember me cookie僞造

我的問題是,如何阻止用戶應對他們的記住密鑰cookie並將其傳遞給他們的朋友?因爲如果他們這樣做,那麼複製cookie的人將會在不知道帳戶密碼的情況下登錄,然後他們將訪問高級帳戶而不購買它。

我不能將密鑰綁定到IP,否則記住我不會很好,因爲許多計算機經常更換ips。我雖然關於保存用戶代理和其他瀏覽器信息,你覺得呢?

+0

同樣的道理:什麼會阻止用戶給他們的用戶名和密碼?你假設你的用戶在一起工作,共享UN/PW似乎比複製一個即將過期的cookie更容易... –

+0

是的,但給這個cookie而不是密碼,他可以發送cookie到很多人,並且沒有人能夠更改密碼並獲取它自己的帳戶,只有主要所有者 –

+0

然後將每個付費用戶的併發會話數限制爲1。 – 2013-01-19 11:11:52

回答

6

您可以通過在每次使用cookie時重新生成cookie的密鑰來檢測cookie的共享。如果有人給別人(或者它被盜)提供了一個記得我的cookie,並且他們都使用它,那麼他們在使用他們的cookie後最終會得到不同的密鑰。

只允許爲每個帳戶最近生成的密鑰。如果有人使用與數據庫值不匹配的密鑰,則使與用戶關聯的所有會話無效。

+0

好吧,好主意,我認爲這是解決方案! –

0

我的問題是,我該如何阻止用戶將他們記得我的密鑰 cookie並將其傳遞給他們的朋友?

最好的解決辦法是不使用記得我: https://www.owasp.org/index.php/Guide_to_Authentication#Remember_Me

如果你仍然想,那麼你可以檢查請求者瀏覽器和IP,但隨後也許你有使用性的問題。將併發會話數限制爲每個付費用戶1個可能會阻止您關心的漏洞利用。

+0

是的,就像用戶更新瀏覽器時一樣(鉻幾乎是每一次周),但我不想刪除記住我的功能,這是我的網站非常重要 –