我刚为网站上的用户登录实施了“记住我”功能。大多数建议是将用户标识存储在cookie中,然后使用一些长的,不可思议的随机密钥。如果这两者都匹配,则认为用户已通过身份验证。
有两个字符串实际上有帮助吗?更长的钥匙不会做同样的事吗?
换句话说,作为一个较长的密钥,两个密钥是否同样容易受到攻击? (我想这将是键的总长度,无论你有多少)
注意:这里也可能存在一些数据库查询效率问题,例如,在数据库中查找一个大的UUID并不像查找一个小数字那么容易。 (在切线说明中,Gmail使用六位数字作为一次性登录令牌以及用户名。)
答案 0 :(得分:1)
我不是加密专家,但只要您检查暴力强制尝试,您就应该能够使用短密钥(如Gmail的6位数字)。真正的漏洞是人们在用户登录时进行监听(例如,SideJacking)。
答案 1 :(得分:1)
在我之前创建的网站中,我使用了user_id
和用户密码的盐渍哈希。我使用两个字段来验证用户的主要原因是因为它为我节省了添加另一个表的麻烦(从而使数据库设计复杂化。)在user_id
也存储在cookie中我可以做索引的外观用户表中的-up并有效地将salted哈希与用户匹配。当然,您可以将user_id和hash都连接成一个值,然后将其存储在cookie中。
如果您只是一个随机的不可语句字符串,那么您必须有一个单独的表来将随机字符串与用户ID相关联,并为该特定用户进行另一次查找。
答案 2 :(得分:1)
在此SO thread中对此进行了深入的讨论。
...用户被视为已通过身份验证。
应该阅读经过身份验证但有限的授权。
每条评论:因为一次性使用而且很难猜测,所以更安全一些。因此,如果cookie被泄露,攻击者必须迅速采取行动,或者合法用户登录时令牌将无效,而用户ID可能不会长时间更改。