我一直在寻找具有基于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中的“已登录”值会翻转并且用户重定向到登录页面。
我不是安全专家,以前没有看过这个设计。我很想知道你可以看到哪些陷阱和风险,如果有的话。 (我,我有一个不好的感觉,但想要一些更坚实的输入。)
如果这是在网络的某个角落的标准方式,我也想听到它。
非常感谢。密钥管理本身就是一个问题,除了UI登录会话之外,还有其他一些影响。我最想知道的是生成JavaScript来设置会话令牌的含义 - 我想这可以在客户端以非预期的方式访问。我仍在仔细研究这一点。 – chryss 2010-08-04 18:54:42
当您谈到生成JavaScript以在客户端文档中设置令牌时,我刚刚发生了一次脑波。无可否认,这是一个坏主意,因为它恰好是一个更敏感的信息位,与其他数据发送时相比,不能提供任何额外的安全性。看看更新的答案。 – 2010-08-04 19:32:42