【问题标题】:what is the vulnerability of having Jsessionid on first request only仅在第一次请求时拥有 Jsessionid 的漏洞是什么
【发布时间】:2026-01-31 06:20:12
【问题描述】:

最近我们从 URL 中删除了 jsessionid,做了基于 cookie 的会话管理,以防止“会话劫持攻击”

但我们发现,启用 cookie 时,第一个请求 URL 总是有 jsessionid,而后续请求 URL 没有 jsessionid。

使用第一个 url 中的 jsessionid,我们可以直接点击工作流中的其他页面

问题:是否存在仅在第一次请求时暴露 jsessionid 的安全漏洞?

有一个解决方案可以从第一个请求中删除 jsessionid,但想检查它是否真的容易受到强制更改的影响

谢谢 J

编辑:我的疑问得到了澄清。感谢回复。

【问题讨论】:

    标签: security jsessionid


    【解决方案1】:

    您在此处所做的可以在一定程度上提高解决方案的整体安全性,但不一定能防止会话劫持。

    在 URL 中放置会话 ID 的安全问题是 URL 会暴露在不同的地方(例如,复制和粘贴的 URL 可能会暴露实时会话,URL 可以存储在代理服务器日志、Web 服务器日志和浏览器历史记录中) ),这可能允许攻击者获取有效的会话 ID 并访问您的用户数据。

    理想情况下,您应该在所有位置从 URL 中删除 JSESSIONID,并且只使用 cookie 存储。

    此外,如果您想减轻会话劫持,还有许多其他方面需要考虑。

    您需要在传递会话 ID 的所有页面上使用 SSL(这是为了降低会话 ID 在传输过程中被拦截的风险(例如 Firesheep 攻击)。

    如果在对用户进行身份验证之前设置了会话 ID,则应确保在用户登录时颁发新的会话 ID。

    如果可能的话,会话 cookie 应该使用 httpOnly 和安全标志,以降低它们通过明文渠道泄露的风险。

    OWASP Site 上有一些很好的附加信息

    顺便说一句,如果您对事物的安全性有更多疑问,Security.stackexchange.com 有专门的堆栈交换站点@

    【讨论】:

    • 是的,我们正在提高整体安全性,感谢您提供更多信息。
    【解决方案2】:

    做了基于 cookie 的会话管理来防止“会话劫持攻击”

    是什么阻止了 cookie 被劫持?

    会话管理是服务器端的事情 - 您需要服务器检查(基于 cookie)用户是否要登录。

    老实说,我认为您根本没有提高这里的安全性,请查看at this excellent article 了解原因。

    【讨论】:

    • 我同意,cookie 可以被劫持。我们的要求是不要在 URL 上公开 jsessionid,可能不是 100% 安全的。但是 jsessionid 我们的第一个请求 URL 有什么不良影响吗?请澄清
    • 它没有比使用 cookie 更多的不良影响 - 我会严重质疑这些要求
    • 是的,同样脆弱。但我们将在下一个版本解决会话劫持问题。提高整体安全性是我们目前的目标。我最初的帖子有点误导
    • 不,它们并非同样脆弱。即使站点在 SSL 上,在 URL 中包含会话 ID 也可能是一个问题。攻击者可以创建一个带有预定义会话 ID 的 URL,并诱骗用户(通过 twitter 上的 url 缩短等)访问该 url。现在,受害者获得了一个会话,其中会话 id 对攻击者来说是已知的。在浏览器历史记录、代理等中也会跟踪 URL。Cookie 不会。
    • @Erlend 正在描述session fixation。如果您的应用程序在 url 中接受 JSESSIONID 并且您没有进行任何额外的检查(例如验证 ip),那么您很容易受到攻击。 Servlet 3.0 规范有一个 COOKIE 以确保 JSESSIONID 仅用作 cookie。规范甚至建议不要在 url 中使用 JSESSIONID。
    【解决方案3】:

    如果有人掌握了会话 ID,那么他们几乎劫持了整个会话,请参阅 Predictable Session IDs 漏洞。

    【讨论】:

    • 你的意思是在第一个请求 URL 上有 jsessionid 仍然会使应用程序易受攻击
    • 根据文章,是的。
    • 谢谢。实际上我确实尝试了一个多用户场景,我从第一个请求 URL 中提取 jsessionid,并且会话数据可用于具有相同 jsessionid 的多个用户。谢谢J