2

我们有以下情况:

  1. 转到http ://website/ 并单击指向http ://website/appX的链接
    检查 cookie 显示的 JSessionID 是否为 Secure = NO。

  2. 打开另一个浏览器窗口或选项卡并转到https ://website/ 并单击指向https ://website/appY 的链接。
    检查 cookie 显示的 JSessionID 是否为 secure = YES。

  3. 尝试与在步骤 1 中创建的窗口/选项卡进行交互。我的会话已过期...

如果我们重复这些步骤,但在步骤 2 中使用https ://website/appX 而不是https ://website/appY,那么 JSessionID cookie 将保持 Secure=NO。

所有 cookie 都有 JSessionId,最后附加了 jvmRoute。

--

我们正在使用:

Apache (2.2.3-43.el5_5.3) + mod_jk(带粘性会话)和配置到多个 JBoss 实例(v 4.3.0)的负载均衡器。

我只发现了一个完全相同问题的链接(通常其他问题使用 PHP): http ://threebit.net/mail-archive/tomcat-users/msg17687.html

问:我们如何防止 JSessionId cookie 被重写?

4

3 回答 3

2

从安全的角度来看,这是正确的行为,因为如果在 http 中也使用相同的 session id/cooki,攻击者可以窃取 https 中使用的 session id/cooki。

有关更多详细信息,请参见我的答案。

所以如果你想构建一个安全的应用程序(我希望这个,因为你使用 https),那么你不能改变这个!

于 2011-04-08T13:50:03.987 回答
1

从 HTTPS 切换到 HTTP 时,不会保留 SessionID/Cookie,反之亦然。您可以在 URL 中传递这些参数以传递值。

于 2011-04-08T14:43:34.007 回答
0

在 deploy/jboss-web.deployer/server.xml 中的连接器配置(用于 JBoss 中的 Tomcat 捆绑版本)中,有一个emptySessionPath属性控制会话 cookie 是否设置在上下文路径上。

<Connector port="8080" address="${jboss.bind.address}"    
     maxThreads="250" maxHttpHeaderSize="8192"
     emptySessionPath="true" protocol="HTTP/1.1"
     enableLookups="false" redirectPort="8443" acceptCount="100"
     connectionTimeout="20000" disableUploadTimeout="true" /> 

如果将此设置为 false,则每个应用程序将拥有一个 cookie,从而防止问题发生。

于 2011-09-26T14:27:13.177 回答