我打算只使用Cookie(而非会话)来验证我网站私有部分周围的用户。我希望用户无限期地保持登录状态,除非他们自己注销。它会像这样工作:
1. 成功登录后,我会生成一个随机哈希并将其作为HTTP cookie存储在用户身上(使用SSL)。我还将哈希值存储在我的数据库中,以及用户ID和用户设备。
2. 每当请求新页面时,我都会检查用户是否有Cookie。如果他有我得到哈希并在我的数据库中搜索它。如果我找到匹配且设备相同,我认为它是用户并给出页面。如果我找不到哈希值或设备已更改,我认为它不是用户并要求再次登录。
我的问题:安全方面,这种方法是否可以接受?我不明白为什么这会比使用会话安全性更低(在两种情况下都保持用户登录),因为最终风险是相同的,这是攻击者发现哈希来冒充用户。我对此的防御是跟踪用户设备,因此攻击者需要发现哈希并拥有相同的设备。
感谢您的反馈。
答案 0 :(得分:2)
您所描述的基本上是大多数语言/框架提供的会话功能。
确保您的哈希值不使用用户登录的时间作为熵源,即。不要使用h(用户名+登录时间),因为如果攻击者知道大概的登录时间,这可能很容易被强制强制使用。
您实际使用的语言/框架是什么?在大多数情况下,您会发现可以选择将会话“功能”与持久性cookie(而不是会话式cookie)一起使用,这样可以节省您从头开始实施此操作并可能产生其他安全问题。