【发布时间】:2011-03-24 23:17:51
【问题描述】:
我一直在研究具有基于 Web 的用户界面的旧版应用程序。考虑到它的使用年限(某些部分将近 10 年),有很多地方需要更新和重新架构,但我想知道关于用户会话如何工作的一个小问题。
简而言之:
- 整个 UI 都是通过 HTTPS 提供的。
- 通过将用户名和密码哈希值与保存在数据库中的值进行比较,对用户进行了不起眼的身份验证。
- 在进行身份验证时,会设置一个浏览器 cookie,其中包含两个值,用于保存用户访问的最后一个顶级和第二个顶级部分/模块、一个到期日期和一个类似“loggedin=true”的值”。注销后,cookie 将重置为“loggedin=false”。 cookie 中没有会话令牌。
- 身份验证后加载的第一个页面,以及随后的每个页面加载,都包含一个 JavaScript 变量“sessionToken”,它是一个带有多个部分的 base64 编码字符串,其中一些已加密:
var sessionToken = "...." - 每个导航链接生成一个 HTTP POST 请求,通过
<form>元素和 JavaScript 事件处理程序,相关变量在幕后传递给它,以及 sessionToken,然后再次设置,同样地,在下一页加载。如果同时 cookie 具有“loggedin=true”,并且过期时间尚未过去,则用户保持登录状态。 - 会话在可配置的时间后过期。过期发生在过期后下次单击导航项时。我相信这只是通过比较上次在后端写出会话令牌的时间,但也许使用了 cookie——我还没有发现这一点。当会话过期时,cookie 中的“loggedin”值被翻转,用户被重定向到登录页面。
我不是安全专家,以前从未见过这种设计。我很想知道你可以从中看到哪些陷阱和风险(如果有的话)。 (我,我有一种不好的感觉,但想要一些更可靠的输入。)
如果这是网络某个角落的标准方式,我也想听听。
【问题讨论】:
标签: javascript security web-applications cookies session