2010-08-03 73 views
1

我一直在寻找具有基于Web的用户界面的遗留应用程序。考虑到它的年龄(将近10年),有很多需要更新和重新设计,但我想知道关于用户会话如何工作的一个小问题。评估:基于Web的应用程序中的奇数会话管理

简而言之:

  • 整个UI经由HTTPS服务。
  • 通过将用户名和密码散列值与数据库中保存的值进行比较,用户得到了不起眼的验证。
  • 验证后,设置了一个浏览器cookie,其中包含两个值,用于保存用户访问过的最后一个顶级和第二级顶级部分/模块,过期日期和像“loggedin = true”这样的值”。注销后,Cookie将被重置为“loggedin = false”。 Cookie中没有会话令牌。
  • 第一页认证之后加载,以及每个后续页面加载,含有JavaScript变量“sessionToken”,这是与各个部分,其中的一些加密的base64编码串:var sessionToken = "...."
  • 每个导航链接产生HTTP POST请求,通过<form>元素和JavaScript事件处理程序,以及在幕后传递给它的相关变量,以及sessionToken,然后在下一页加载中再次设置相同的值。如果cookie同时具有“loggedin = true”,并且过期时间尚未过去,则用户保持登录状态。
  • 会话在可配置时间后过期。到期时间到期后,下一次点击导航项目时发生失效。我相信这只是通过比较最后一次会话令牌在后端写出来,但也许使用了cookie - 我还没有发现这一点。会话过期时,Cookie中的“已登录”值会翻转并且用户重定向到登录页面。

我不是安全专家,以前没有看过这个设计。我很想知道你可以看到哪些陷阱和风险,如果有的话。 (我,我有一个不好的感觉,但想要一些更坚实的输入。)

如果这是在网络的某个角落的标准方式,我也想听到它。

回答

1

Ian在他的回答中已经指出,依赖cookie值来表示用户的认证性质是不好的。我将重点介绍会话cookie的管理方式。

会话cookie /令牌旨在是独一无二的,他们不打算泄露给其他用户。使用HTTPS可确保在应用程序中不会在电线上嗅探到这些内容。但是,是否有可能猜测会话令牌的值?如果是这样,你有一个问题;现代应用程序依靠安全的框架来使用良好的PRNG生成会话cookie /令牌。如果您的应用程序没有享受到类似的随机性水平,那么假设会话令牌可以轻松推断,从而导致用户能够欺骗其他用户。

此外,在会话令牌的某些部分使用加密很有趣。这些部件的解密密钥是否安全管理?换句话说,密钥是硬编码的吗?或者它碰巧是每个安装一个密钥,或者随机生成一个短的生命周期?如果密钥可以被猜测,推断或以任何方式被破解,那么你或多或少有同样的问题。

对会话密钥使用加密也可能使其容易受到填充oracle攻击,但我不确定这一点。更多细节会有所帮助。

我只是猜测这里,因为我没有算法的确切细节,但仅仅使用HTTPS不需要授予任何安全感。我注意到遵守野外数学序列的会话令牌。

最后,需要验证会话持续时间和/或会话令牌到期的滑动窗口持续时间的硬配置限制的可用性。否则,妥协会话很可能会尽可能长时间地活着,有时需要由于某些系统的性质而对攻击者进行“实际”驱逐。 PS:同时验证用于密码的哈希算法;使用盐是很好的。所有实际目的都会破坏MD5。

使用自定义会话管理机制

乍一看影响,无需使用cookies的使用会话令牌似乎没有任何显著的问题,但人们往往失去了几安全功能在大多数平台上都可用 - cookie标志。安全和HttpOnly cookie标志降低了cookie在线路上被嗅探的风险(当客户端发送到服务器时),并且还确保客户端代码无权访问令牌,稍后可能会受到XSS攻击。因此,使用会话cookie比使用自定义会话令牌要好(在实现中很少或不需要同行评议)。

+0

非常感谢。密钥管理本身就是一个问题,除了UI登录会话之外,还有其他一些影响。我最想知道的是生成JavaScript来设置会话令牌的含义 - 我想这可以在客户端以非预期的方式访问。我仍在仔细研究这一点。 – chryss 2010-08-04 18:54:42

+0

当您谈到生成JavaScript以在客户端文档中设置令牌时,我刚刚发生了一次脑波。无可否认,这是一个坏主意,因为它恰好是一个更敏感的信息位,与其他数据发送时相比,不能提供任何额外的安全性。看看更新的答案。 – 2010-08-04 19:32:42

2

Cookie可以明显被操纵,因此类似的东西“的loggedIn =真”进行认证提高,除非它是严格地用作导致进一步的认证检查针对的sessionid,方法等

在注销的一个标志cookie应该被删除,而不是设置为“loggedin = false”。

安全性似乎取决于sessionToken的内容。确保这个值不能被分开,并且仅仅通过base64解码/重新编码重新改变重要的信息(用户ID,管理权限标志等)。

完全通过表单提交导航并不完全是一种标准的会话方法。我建议将sessionToken移动到一个cookie。

+0

谢谢。实际上,导航设计出于各种原因是一个巨大的痛苦。我最想知道的是生成JavaScript来设置会话令牌的含义 - 我想这可以在客户端以非预期的方式访问。我仍在仔细研究这一点。 – chryss 2010-08-04 18:54:10

相关问题