atg-weblogic: Making JSESSIONID secure



我正在使用带有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-cookie enabled设置为false,看看它是否会从weblogic.xml中安全地接受cookie,但它没有。

<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漏洞修复),他们强调了runAssembler命令问题,那里提供的解决方案也不适用于weblogic,(在那里留下了评论)。Weblogic甚至不检查context.xml(我尝试放置一个无效的xml,启动时没有错误)

我还注意到,如果我将weblogic.xml中的cookie名称更改为另一个名称,仍然会生成一个JSESSIONID,并且新的cookie变得安全

-有其他东西生成这个cookie吗
-为什么weblogic无法保护JSESSIONID,甚至无法更改其路径(更改cookie路径会导致发送两个JEESSIONID cookie)

之前有人尝试过吗?请分享你的想法。

这可能无法回答您的所有问题,但至少可以为您提供更多关于ATG和Weblogic如何协同工作的背景知识。

建议您查看/atg/dynamo/servlet/sessiontracking/GenericSessionManager组件。属性singleSessionIdPerUser默认为不同的值,具体取决于您在WebLogic、Websphere和jBoss上运行的应用程序服务器。Weblogic将此属性设置为false,而jBoss和Weblogic将其设置为true,这就是为什么我认为Weblogic中不存在该漏洞,因为服务器端根据Weblogic会话id查找特定于ATG的会话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应用程序之间共享请求属性的应用程序服务器,它还设置了一个名为ATG_SESSION_ID的cookie和会话ID。此行为由/ATG/denamo/servlet/sessiontracking/GenericSessionManager.useSessionTrackingCookie属性控制,该属性为每个应用程序服务器预先配置了正确的值。

更多信息可以在这里找到。

此外,请参阅我对SO上一个关于在web逻辑/atg上以编程方式注销用户的问题的回答,我认为这与weblogic 上的上述singleSessionIdPerUser=false有关

如果您查看ATG发布的cookie,您可能会发现它被发布到根上下文路径(例如path=/;),而不是您为其自定义web.xml的web应用程序的上下文。

由于在ATG中管理会话的方式,可能没有考虑您的weblogic.xml设置。

默认情况下,会话通常在ATG中的web应用程序之间共享。这与会话是特定于web应用程序的标准J2EE行为有点不同,但它允许ATG支持客户所需的一些多站点功能。

这是怎么回事?

ATG具有"父"会话上下文的概念,每当您在web应用程序上启动会话时,都会创建该上下文。因此,虽然你可能会遇到具有不同上下文根的不同网络应用程序,但ATG内部只会创建一个"父"会话。默认情况下,此父会话通常绑定到atg_bootstrap.war web应用程序。

一些选项:

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

请注意,如果您打算在不同的web应用程序之间共享会话,第二个选项可能会破坏多站点行为。

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

  • Doc ID 1364857.1:ATG会话管理如何在WebLogic、JBoss和WebSphere上工作

相关内容

  • 没有找到相关文章

最新更新