簡體   English   中英

Jetty / Tomcat加密基於cookie的會話存儲?

[英]Jetty/Tomcat encrypted cookie-based session storage?

Ruby on Rails已經支持已簽名的基於cookie的會話很長一段時間了 ,從那時起就出現了一些加密的實現 PythonPHP也有實現。

Java servlet容器Jetty或Tomcat是否存在這樣的野獸?

我們在集群環境中使用PHP實現獲得了基於RDBMS的會話的顯着性能提升,並且我有興趣嘗試使用我們的Java應用程序(目前使用Jetty 7)之類的東西。

我知道實現這一目標的其他方法( memcached同步內存緩存),但我相信,對於我們的特殊需求,這種存儲方法的局限性(輸出前的會話終結,4K cookie大小限制后的高效存儲)對於這個特定的應用程序,更簡單的部署環境超過了對超級秘密服務器端密鑰的依賴。

如果一個實現不存在,有沒有人有任何想法,為什么它不會? (例如,Java會話通常大於4K,因此不適合這種存儲方法)

我們已經實現了Session-In-Cookie並在Tomcat集群中成功使用它,以允許20個節點之間的會話共享,從而實現零中斷部署。 我剛剛在這里編寫了關於實現的兩部分系列的第一部分: http//blog.shinetech.com/2012/12/18/simple-session-sharing-in-tomcat-cluster-using-the- session-in-cookie-pattern / 這部分涉及基本實現,安全方面將在第二部分中介紹。

看來這里有兩個問題:

  1. 有效無狀態會話管理的Java / J2EE實現。
  2. 安全會話實現。

關於第一個問題:是的,根據會話圖的大小(所有會話變量/對象的深度嵌套),cookie大小限制(實際上是HTTP標頭限制)是一個重要因素。 如果會話圖整齊地適合HTTP Header限制(在某種程度上可在Web服務器端配置)和/或可以使用基於REST的URL查詢參數進行擴充(以減輕服務器上的某些狀態信息) ...然后可以實現cookie。 然而,這將是程序化的而不是容器管理的。

關於第二個問題:保障會議是另一回事。 Java / J2EE系統中臭名昭着的JSESSIONID公共cookie是應用程序服務器上內存或磁盤緩存會話的簡單令牌密鑰。 它只是一個地圖鍵。 使用該密鑰,任何人都可以竊取或冒充用戶會話。 這可能是整個容器管理會話設備中最薄弱的環節之一。 有一些商業安全會話產品可以防止cookie竊取會話劫持,防止重放攻擊(可以通過捕獲重放加密登錄會話來獲取會話來打敗SSL)和其他攻擊媒介。 我所知道的一個產品可以在不更改代碼的情況下執行此操作(通過安全過濾器)。 但是,我不知道任何通用框架或開源計划來填補這個漏洞,可能是因為它需要一定程度的專業知識,而不僅僅是一般的應用程序開發。

我不知道任何容器中的任何內容都會將HttpSession序列化為cookie。 您可以通過實現一個過濾器來實現這種功能,該過濾器能夠在對Web客戶端的響應中將會話狀態序列化為cookie,並在請求時對其進行反序列化。 您仍然受到任何客戶端cookie限制的約束,您應該仔細考慮您存儲客戶端的狀態的安全隱患和/或您對呈現cookie的客戶端的信任程度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM