我正在使用带有ATG 10.1.2的weblogic 10.3.6
我想让我的JSESSIONID安全,我尝试按如下方式设置weblogic.xml,
<session-descriptor>
<cookie-name>JSESSIONID</cookie-name>
<timeout-secs>1200</timeout-secs>
<cookie-secure>true</cookie-secure>
<url-rewriting-enabled>false</url-rewriting-enabled>
</session-descriptor>
我尝试将auth-coookie-enabled设置为false,以查看它是否从weblogic.xml中获得了cookie-secure,但事实并非如此。
<web-app-container>
<x-powered-by-header-level>SHORT</x-powered-by-header-level>
<auth-cookie-enabled>false</auth-cookie-enabled>
</web-app-container>
spakred家伙早些时候发布过类似的帖子(httpOnly vulnerability fix),他们突出了runAssembler命令问题,提供的解决方案也不适用于weblogic,(在那里留下了评论) 。 Weblogic甚至不检查context.xml (我尝试使用无效的XML,启动时没有错误)
我还注意到,如果我将weblogic.xml中的cookie-name更改为其他名称,仍会生成JSESSIONID,新cookie将变为安全。
- 还有其他东西产生这个cookie吗?
- 为什么weblogic不能保护JSESSIONID甚至更改其路径(更改cookie路径结果,发送两个JESSIONID cookie)?
有没有人先试过这个,请分享一下你的想法。
答案 0 :(得分:0)
这可能无法解答您的所有问题,但至少可以为您提供有关ATG和Weblogic如何协同工作的更多背景知识。
建议您查看/atg/dynamo/servlet/sessiontracking/GenericSessionManager
组件。属性singleSessionIdPerUser
默认为不同的值,具体取决于您在WebLogic与Websphere和jBoss上运行的应用程序服务器。 Weblogic将此属性设置为false
,而jBoss和WebLogic将其设置为true
,这就是我认为Weblogic中不存在此漏洞的原因,因为存在基于ATG特定会话ID的服务器端查找在WebLogic会话ID上(假设您已经保护了web逻辑jsessionid)。
来自ATG的帮助:
当singleSessionIdPerUser值为true时,应用程序服务器对所有Web应用程序使用相同的会话ID,因此不需要查找。请注意,应用程序服务器分发相同的会话ID,但不是相同的HttpSession对象。
当singleSessionIdPerUser为false时,查找确定会话名称上下文ID。这是由atg.nucleus.servlet.SessionNameContextServlet servlet(包含在atg_bootstrap.war中)完成的,使用RequestDispatcher.include()调用。 SessionNameContextServlet做了两件事:
将父会话ID设置为请求属性,然后子Web应用程序可以将其用于绑定到正确的会话上下文。
对于不允许在Web应用程序之间共享请求属性的应用程序服务器,它还会使用会话ID设置名为ATG_SESSION_ID的cookie。此行为由/atg/dynamo/servlet/sessiontracking/GenericSessionManager.useSessionTrackingCookie属性控制,该属性为每个应用程序服务器预先配置了正确的值。
可以找到更多信息here。
另外,请参阅我的answer关于SO的问题,关于在web logic / atg上以编程方式记录用户,我认为这与上面提到的weblogic上的singleSessionIdPerUser=false
相关
答案 1 :(得分:0)
如果您查看ATG发布的cookie,您可能会看到它被发布到根上下文路径(例如Path = /;),而不是您已定制的Web应用程序的上下文web.xml for。
由于在ATG中管理会话的方式,可能不会考虑您的weblogic.xml设置。
默认情况下,会话通常在ATG中的Web应用程序之间共享。这与会话特定于Web应用程序的标准J2EE行为略有不同,但它允许ATG支持客户所需的一些多站点功能。
所以这里发生了什么?
ATG具有“父”会话上下文的概念,只要您在Web应用程序上启动会话,就会创建该上下文。因此,虽然您可能会遇到具有不同上下文根的不同Web应用程序,但ATG内部只会创建一个“父”会话。默认情况下,此父会话通常绑定到atg_bootstrap.war web-app。
一些选项:
<session-descriptor> <cookie-path>/store</cookie-path> <cookie-secure>true</cookie-secure> </session-descriptor>
请注意,如果您打算在不同的网络应用中共享会话,则第二个选项可能会破坏多站点行为。
Oracle KB(support.oracle.com)中有一篇很好的文章描述了ATG中的会话管理行为: