会话劫持:以应该具有较少权限的 B 用户身份登录,使用 A 用户会话 ID 获得作为管理员的所有访问权限



我们的Web应用程序是Java应用程序,功能如下所示:

  1. Chrome 浏览器:用户 A 以具有所有访问权限的"admin"角色登录> 复制会话 ID
  2. Firefox 浏览器:用户 B 以角色"受限用户"身份登录同一门户网站,访问权限较少。
  3. 将从 Chrome 浏览器复制的会话 ID 粘贴到火狐浏览器中> 用户现在被视为管理员。

这真的是一个问题吗?由于我们的 cookie 已经设置了标志 - https,安全且站点使用 https 托管,因此泄漏会话 ID 的机会较小。

我们可以将此报告为安全问题吗? 请指导。

我猜在使用用户名和密码进行身份验证后,用户会收到一个会话 ID。从那时起,会话 ID 将透明地用于用户对进一步的请求进行身份验证,因此他们不必一直键入用户名和密码。如果您愿意,他们的用户名和密码可以交换为临时会话 ID,该 ID 在会话期间等同于他们的凭据。这意味着丢失会话 ID 与丢失用户名和密码非常相似(有一些显着差异,例如它是有时间限制的(。

因此,承认这一点,您可以看到,由于 Web 应用程序除了会话 ID 之外,在后续请求中确实没有其他任何东西可以对用户进行身份验证,因此拥有会话 ID 的人将被认证为它所属的用户(旁注:您可以应用一些进一步的控制,例如将会话绑定到客户端 IP 地址等, 但这些会对用户体验等产生影响(

所以这不是一个漏洞,这只是它的工作原理,这正是你应该实现适当的会话安全性的原因,通过保护保存会话 ID 的 cookie 免受窃听(通过使用 https,并将secure标志应用于 cookie(和 xss(通过应用httpOnly标志(等攻击,生成足够安全的会话 ID, 防止会话固定等。

实现这一点的最简单方法是使用框架的内置工具,这可能会使其正确。

最新更新