1

我刚刚为网站上的用户登录实现了“记住我”功能。大多数建议是将用户 ID 存储在 cookie 中,然后使用一些长的、不可猜测的随机密钥。如果两者都匹配,则认为用户已通过身份验证。

有两个字符串真的有帮助吗?更长的钥匙不会做同样的事情吗?

换句话说,两个密钥不是和一个更长的密钥一样容易受到攻击吗?(我想这将是钥匙的总长度,不管你有多少)

注意:这里也可能存在一些 DB 查询效率问题,例如,在 DB 中查找大 UUID 并不像查找小数字那么容易。(顺便说一句,Gmail 使用六位数字作为其一次性登录令牌以及用户名。)

4

3 回答 3

1

我不是加密专家,但只要您检查暴力破解尝试,您应该能够使用短密钥(如 Gmail 的 6 位数字)。真正的漏洞是人们在用户登录时监听(例如 SideJacking)。

于 2009-07-03T01:29:45.183 回答
1

在我之前创建的站点中,我使用user_id了用户密码的一个和一个加盐哈希。我使用两个字段来验证用户的主要原因是因为它省去了添加另一个表的麻烦(从而使数据库设计复杂化)。由于user_id也存储在 cookie 中,我可以在 users 表中进行索引查找并有效地将加盐哈希与用户匹配。当然,您可以将 user_id 和哈希连接成一个值,然后将其存储在 cookie 中。

如果您只有一个不可猜测的随机字符串,那么您将必须有一个单独的表来将随机字符串与用户 ID 相关联,并为该特定用户进行另一次查找。

于 2009-07-03T01:30:41.830 回答
1

在这个SO 线程中对此进行了强有力的讨论。

...用户被认为是经过身份验证的。

可能应该读取已验证但授权有限。

每条评论:更安全一些,因为它是一次性使用的,而且很难猜到。因此,如果 cookie 被泄露,攻击者必须迅速采取行动,否则令牌将被合法用户登录而失效,而用户 ID 可能很长一段时间都不会改变。

于 2009-07-03T01:36:48.040 回答