用户注销后 JSessionID 未更改 - 这是一个安全问题吗?



在我们的WebLogic应用程序的一些调试过程中,我注意到JSESSIONID在用户注销后不会改变。

我试图了解这是否是我需要关注的事情。

此应用程序是在 WebLogic 实例中运行的两个应用程序之一,我注意到它们都共享相同的 JSESSIONID。

这个问题涉及以下内容:

SRV.7.3 会话范围

HttpSession 对象的作用域必须限定在应用程序(或 servlet) 上下文)级别。底层机制,例如用于 建立会话,对于不同的上下文可以相同,但是 引用的对象(包括该对象中的属性)不得 由容器在上下文之间共享。

这表明最终由WegLogic选择如何管理这些JSESSIONID值,我不应该试图从值的变化(或缺乏值)中解释意义。

此外,我已经在应用程序上连接了一个HttpSessionListener,我看到sessionDestroyed方法被调用。

鉴于这两个元素,在我看来,JSESSIONID 没有改变似乎是安全的。 但是,这与我习惯的行为不同,因此想验证我的假设。

JSESSIONID 不会更改是否是安全问题?

不,这不应该是一个巨大的安全问题,因为实际与该会话关联的所有数据都将被丢弃。 JSESSIONID只是该(现在不存在的)数据的关键。

但是,如果您希望每次注销/登录时更改JSESSIONID,则可以实现注销功能,以便在用户注销时显式删除JSESSIONID cookie。 然后,服务器将在他们的下一个请求中为他们分配一个全新的会话/ID。

当然,如文档中所述,如果您有多个上下文,而这些上下文恰好都依赖于单个JSESSIONID cookie,那么从一个上下文中删除它基本上会将其从所有上下文中删除,从而有效地将用户从服务器上的每个上下文中注销。 尽管在实践中,拥有多个面向用户的上下文并不常见,每个上下文都有自己的登录/会话状态。

最新更新