現在我的應用程序中的cookie以用戶ID的某種格式生成。我希望我的cookie在每次登錄後隨機生成,因此即使cookie被盜,一旦它們永遠不會被黑客永遠使用。Java中的Cookie和安全性(GAE)
以這種方式處理cookie的最佳做法是什麼?我應該如何存儲/檢索它們(散列表/數據存儲......)?
感謝
現在我的應用程序中的cookie以用戶ID的某種格式生成。我希望我的cookie在每次登錄後隨機生成,因此即使cookie被盜,一旦它們永遠不會被黑客永遠使用。Java中的Cookie和安全性(GAE)
以這種方式處理cookie的最佳做法是什麼?我應該如何存儲/檢索它們(散列表/數據存儲......)?
感謝
你可以試試以下參數:
加入它成一個字符串(例如13413:1826271762:b026324c6904b2a9cb4b88d6d61c81d1
),並將其存儲到像USERID
的cookie。
在每次請求需要:
感謝您的回覆。問題是,如果cookie是預定義的(根本不是隨機的),黑客可以在將來使用它一次。 如果我將隨機字符串添加到cookie的值並將其存儲在datastore/memcache中並使用key = userID並在註銷後清除它,該怎麼辦? – Sergey 2012-02-09 10:18:14
是的,這是個好主意。因此,您可以在散列中使用它,作爲鹽 – 2012-02-09 10:37:38
我會建議使用內置的Java會話對象HttpSession
,其中GAE/J有支持。 Look here有關如何在GAE上啓用會話的文檔。
您可以將會話設置爲在某段時間後過期,或者可以在其中存儲數字並從外部驗證會話。
我同意裏克,容器設計人員做了驗證請求是否來自同一用戶,你不想要t o重新發明輪子嗎?
HttpSession session = request.getSession();
這將創建一個新的會話,如果沒有已經存在,但如果這樣做,將讓你現有的會話。
session.setAttribute('key', value);
值可以是任何可串行化的POJO,鍵是一個字符串。 您可以通過以下代碼檢索您應用程序範圍內的存儲值。
Object value = (Object) session.getAttribute('key');
有關如何使用會話的更多信息,請檢查HttpSessions的Java規範。
我的應用程序在GoogleAppEngine上運行,並且我處理多個JVM。反過來,會話信息僅限於當前的Web應用程序(ServletContext)。每個Java虛擬機的每個「Web應用程序」都有一個上下文。 – Sergey 2012-02-12 22:24:24
在AppEngine中,會話由數據存儲支持,因此即使用戶在請求之間碰到不同的實例,它們仍然在請求中保持不變。 – 2012-02-18 05:33:44
隨着「最終一致性」的警告。這是我試圖在我沒有多少運氣創建的應用程序中圍繞我的頭。如果您創建會話,然後用戶立即切換到另一個沒有會話的實例(尚未),那麼您會做什麼? – 2014-05-16 18:21:34
爲什麼不使用標準的東西,比如Spring Security? – 2012-02-08 15:06:28
我不是春秋家庭,這次想寫我自己 – Sergey 2012-02-08 19:56:44