2010-08-18 88 views
7

我目前正在使用GWT在AppEngine上託管一個網站。我使用我自己的登錄名(我知道Google提供了GWT的一些功能,但我需要自己的登錄系統),而且我一直在嘗試弄清楚會話的時間。我找到了一些教程,我正在閱讀的其中一個網站是http://code.google.com/p/google-web-toolkit-incubator/wiki/LoginSecurityFAQGWT:在Cookie中存儲會話ID,然後是什麼?

有一個關於「如何記住登錄名」的部分。我知道如何獲取會話ID並通過RPC調用將其存儲在客戶端的Cookie中。我不明白的是,最終在一天左右後,用戶回來了,我應該從cookie中獲取會話ID並將其發送回服務器。我應該在服務器上做些什麼來安全地評估會話ID是否合法,並提取關於用戶的所有必要信息?

其他問題: 1.什麼會使會話ID更改? 2.如果用戶在筆記本電腦上,並且用戶去了其他地方,該怎麼辦?他是否仍然能夠安全地登錄而不必再次輸入登錄名和密碼?

謝謝!

〜斯科特

回答

1

要記住需要安全地生成一個唯一的會話ID登錄。通常情況下,這是放在一個cookie中。我會推薦使用一個爲你做會話cookie的框架。讓它錯誤可以讓你的網站被濫用。需要考慮的事項包括:

  • 您是否需要擔心cookie被竊取?用戶的IP地址應該在會話ID中進行編碼,或者鏈接到會話ID。檢查每個頁面訪問的IP地址。
  • 確保您的登錄處於加密會話。否則,您將在網絡上以純文本形式公開證書。
  • 會話應持續多久。他們應該在固定的時間限制後超時。這可能需要數小時或數天。
  • 記住我應該是不同的cookie上的不同功能。它需要包含可用於識別用戶的內容。根據您的安全需求,它可能需要是加密值。這個cookie可以有更長的超時時間。

您的其他問題的答案是。

  1. 客戶端沒有可能改變會話ID。每次登錄都應該重新生成會話ID。
  2. 根據會話ID的安全程度,他們可能需要登錄。安全會話cookie通常會對IP地址進行編碼以防止cookie被竊取。如果是這樣,筆記本電腦用戶需要重新登錄。
8

類似的問題:question on GWT, Cookies and webpage directing
您應該記住一件重要的事情:不要單獨依賴cookie - 將請求的有效負載中的會話標識/標記也傳輸到服務器端,並將其與cookie值進行比較。這將防止XSRF攻擊。 那就是你應該擔心的事情。

有關如何處理會話ID的政策取決於您在應用程序中採取安全措施的嚴重性以及它的類型。例如,你可以用不同的IP地址在GMail上登錄相同的標記 - 我認爲他們允許這樣做,因爲用戶的IP通常會在會話中改變。但是,他們添加了一項功能,可以讓您查看用戶最近從哪個IP登錄。並且不要忘記擁有動態IP的用戶(相當多) - 如果您記錄令牌和IP,您將基本禁止這些用戶在會話之間保持登錄狀態。

那我應該在服務器上 做才能安全地評估是否 會話ID仍然是合法的,並拉起 所有必要的信息,關於 用戶?

您應該跟蹤數據庫中的會話ID /登錄對。

什麼使會話ID的變化?

或者它到期或用戶嘗試使用未綁定到其IP的令牌登錄。您也可以添加自己的規則 - 例如登錄次數等。爲了獲得額外的安全性,您可以在每個新的登錄/會話中生​​成一個新的會話ID /令牌(用戶使用舊令牌進行身份驗證,服務器檢查它是否有效並且從現在起將用戶應該使用的新令牌發回給用戶)。