繁体   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