【问题标题】:how to force new session cookie / sessionId when switching from http to https (in Tomcat)从http切换到https时如何强制新的会话cookie/sessionId(在Tomcat中)
【发布时间】:2011-11-12 00:34:01
【问题描述】:

我的问题是:

从 http 更改为 https 时:如何在 Tomcat 上强制更改 JSESSIONID /(即会话 cookie)的值?

这是我的情况:

我认为我们的应用程序存在潜在的安全问题,想知道如何解决它。

我们在 Tomcat 6.x 内运行 JSF1.2 / Seam2 应用程序并强制使用会话 cookie(URL 中没有 sessionid)。

我们允许 http 访问,但是当用户登录时,我们切换到 https 并保持在 https 上。 我们也有一个过滤器,它在请求通过 https 时向 cookie 添加“安全”,以确保会话不能返回到 http。 (不知何故,我认为 Tomcat 会自动执行此操作)

我注意到在 http 和 https 之间切换时 JSESSIONID 没有改变。 这向我表明,攻击者可能会通过 http 窥探会话 cookie,然后劫持会话。

那么如何告诉 Tomcat 在更改为 https 时使用不同的 JSESSIONID? (或者如果这是默认行为:什么会导致这种情况不再发生?)

感谢任何提示/想法!

【问题讨论】:

  • 你如何测试JSESSIONID的变化?我已经在 v6.0.20 上进行了测试并启用了 Tomcat RequestDumperValve - 它向我展示了 JSESSIONID 从 http 到 https 的变化
  • 嗨,我只是在浏览器中查看 JSESSIONID(请求/响应标头)。那里永远不会改变..我会尝试启用 RequestDumperValve(我没听说过)并会再次检查..
  • 是的,对我来说,它不会改变 JSESSIONID :( .. 现在我需要找出为什么我猜这不会发生 :(
  • 您可以尝试一个只有 1 个安全页面和一个不安全页面的新虚拟 Web 应用程序吗?这样我们就可以知道是 Tomcat 内部的问题还是 JSF/Seam 应用程序的问题
  • 为什么您首先允许通过 HTTP 交换登录凭据以获取 cookie?您使解决方案过于复杂,甚至无法正常工作

标签: http tomcat https seam session-cookies


【解决方案1】:

有一段时间(实际上是几年)我在这里发布了这个过滤器,用于在登录后更新会话 ID:

https://issues.jboss.org/browse/JBSEAM-2450

我们在登录后立即调用 newSession() 来标记要在下一个 GET 请求中更新的会话 ID(POST 请求由于视图状态的恢复而无法正常工作,但是 POST/REDIRECT/GET使用 Seam 会经常发出 GET)。

您可能希望将其放入您的过滤器中——或者您只需将会话标记为在下一个 GET 请求中刷新。只需确保在处理 JSF POST 请求时不更新会话即可。

其他人也提供了一个 Tomcat Valve 来解决这个问题

最好的问候, 亚历山大。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-01
    • 2011-12-11
    • 2012-12-28
    • 2014-06-08
    • 2019-01-14
    • 2011-06-05
    • 2015-03-22
    相关资源
    最近更新 更多