atg-weblogic:使JSESSIONID安全

时间:2014-09-15 07:08:10

标签: weblogic weblogic-10.x jsessionid atg atg-dynamo

我正在使用带有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)

有没有人先试过这个,请分享一下你的想法。

2 个答案:

答案 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。

一些选项:

  1. 在构建EAR之后,尝试将weblogic.xml文件放入atg_bootstrap.war / WEB-INF文件夹中,并将'cookie-secure'设置等于true。由于这是最终创建“父”会话的Web应用程序,因此weblogic.xml设置应在此处生效。
  2. 或者,您可以覆盖默认的ATG会话共享行为,并让它为单个Web应用程序发出会话。例如,如果您有一个带有上下文“/ store”的Web应用程序,您可以让它将会话绑定到此Web应用程序上下文而不是父(“/”)上下文。为此,请尝试将weblogic.xml中的“cookie-path”元素设置为web-app的上下文路径。例如,如果您的网络应用程序上下文根是“/ store”:
  3. <session-descriptor>
      <cookie-path>/store</cookie-path>
      <cookie-secure>true</cookie-secure>
    </session-descriptor>
    

    请注意,如果您打算在不同的网络应用中共享会话,则第二个选项可能会破坏多站点行为。

    Oracle KB(support.oracle.com)中有一篇很好的文章描述了ATG中的会话管理行为:

    • Doc ID 1364857.1:ATG会话管理如何在WebLogic,JBoss和WebSphere上运行