0

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

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

- 还有其他东西会生成这个 cookie 吗?
- 为什么 weblogic 不能保护 JSESSIONID 甚至更改其路径(更改 cookie-path 会导致发送两个 JESSIONID cookie)

有没有人之前尝试过,请分享您的想法。

4

2 回答 2

0

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

建议你看看/atg/dynamo/servlet/sessiontracking/GenericSessionManager组件。该属性singleSessionIdPerUser默认为不同的值,具体取决于您在 WebLogic、Websphere 和 jBoss 上运行的应用程序服务器。Weblogic 将此属性设置为,false而 jBoss 和 WebLogic 将其设置为true,这就是为什么我认为 Weblogic 中不存在该漏洞,因为存在基于 WebLogic 会话 ID 的 ATG 特定会话 ID 的服务器端查找(假设您已保护网络逻辑 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 属性控制,该属性为每个应用程序服务器预先配置了正确的值。

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

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

于 2014-09-15T18:24:04.480 回答
0

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

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

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

那么这里发生了什么?

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

一些选项:

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