2011-05-15 67 views
4

因此,讓我說我有一個會員基地網站,當用戶登錄時,我把一個cookie(或會話)與一個鍵值對記住用戶是誰。但它只是引起我的注意,我應該使用哪些信息來記住用戶,以確保其安全。我不能使用username = username或user_id = user_id(因爲我的user_id將是1),因爲人們可以簡單地猜測cookie值是什麼並以該用戶身份登錄。那麼,我應該使用哪些鍵/值對來識別用戶,並將其信息安全地連接到數據庫?謝謝。如何以安全的方式使用Cookie記住用戶?

回答

1

本,有幾種不同類型的攻擊需要關注。例如,簡單地用私鑰加密標識符不會阻止可以截取加密值的人將其簡單地重播到服務器(並且看起來是用戶)。一些常見的安全隱患都在這裏詳述(和相關鏈接,在此頁面底部):

https://www.owasp.org/index.php/Session_hijacking_attack

會話管理可以說是相當複雜的,這取決於安全性您需要的水平,這是不是你想要的東西來解決你自己,因爲可能你的開發環境/框架已經有了一個比自制解決方案更受審查的解決方案。這裏是一個鏈接,詳細說明一些事情要考慮,遺憾的是這個主題具有比簡單的堆棧溢出後更給它:

https://www.owasp.org/index.php/Session_Management

+0

thx輸入虐待檢查這些鏈接 – Ben 2011-05-15 20:07:58

0

您可以使用您保存在服務器上的私有加密密鑰來加密用戶標識。使用此方法需要注意以下幾點:

  • 每次調用服務器都需要您解密cookie以獲取用戶的ID。這會爲每個請求增加開銷。
  • 如果密鑰被破壞,您將被迫放棄您使用的cookie的當前名稱,並在分配給新的cookie名稱時使用另一個加密密鑰;這會導致用戶不得不重新登錄。

雖然我不認爲這些是主要障礙,但它們可能對您有用,您必須爲自己評估對您網站的影響。

+0

關於你的第一點:*'每次調用服務器都需要你解密cookie'*,不一定。該應用程序也可以檢查會話cookie,如果不存在則回退到解密加密的cookie。所以開銷會是每個會話一次解密。另外值得一提的是,應用程序應該忽略基於cookie的敏感操作登錄(如更改密碼),並要求提供密碼。 – 2011-05-15 19:25:29

1

如果你不喜歡以任何理由進行加密,那麼更簡單的解決方案可能是使用GUID來標識用戶。這樣,黑客就不得不在你的應用程序上發起一種拒絕服務攻擊類型的攻擊,即使只有很小一部分GUID也能運行。

如果你想正確地做到這一點,那麼你也應該看看http://jaspan.com/improved_persistent_login_cookie_best_practice也。

1

我絕對不是在安全方面的專家,但我最近實現的用戶管理工具,我做了以下。

  • 不要使用加密,它的緩慢和大部分時間用於簡單的實現只是浪費時間。

以下是您需要在服務器上存儲的內容 - 爲了驗證每個請求。

  • 用戶ID(明顯)
  • CookieHash(做出來的用戶id,一些祕密的私鑰和密碼隨機生成數的)
  • LastLogin
  • SessionRenewed(對於何時取消某人的會話如有用。續約cookieHash每隔10分鐘,否則註銷用戶)
  • LastIP

我存儲在cookie被以下

  • 用戶ID
  • CookieHash

如何使用這個基本的安全

只要當你用戶登錄查詢用戶名/密碼等。(只是一般的)如果一切正常,然後登錄在用戶和生成新的cookiehash並填寫上面給出的值。

每個請求都會根據它的散列檢查UserId。如果有人給了UserId = 4但哈希不匹配,然後自動刪除會話並轉發用戶登錄屏幕。可能的日誌很好看,人們試圖玩弄你辛勤工作的頻率。

我希望這會有所幫助。

+0

如果cookiehash由userId製成,並且攻擊知道userId是什麼,cookiehash的要點是什麼? – Ben 2011-05-15 20:09:02

相關問題