php – 如何在使用持久登录Cookie时检查数据库中的bcrypt-hashed
在
this popular solution中,持久登录Cookie涉及生成随机的128位“令牌”以保存在用户的Cookie中,Jens Roland建议:
但是,如何检查Cookie令牌与数据库中的加密令牌以确认Cookie登录是否有效,当bcrypting Cookie令牌总是会产生不同的结果(因为bcrypting总是使用随机盐)? 换句话说,你不能只是加密Cookie令牌并在数据库中查找匹配项,因为你永远找不到它,所以你如何根据recommended solution(“服务器”)将它与数据库中的哈希版本实际匹配?保留一个number->用户名关联表,查询该表以验证cookie的有效性.“)? 编辑: 请记住,根据上面链接的推荐解决方案,单个用户可以为不同的设备提供多个Cookie /令牌.我提到这是因为答案已经提交(已被删除),认为每个用户只有一个令牌. 解决方法
如前面的答案所述,bcrypt将随机盐存储为哈希的一部分,因此数据库中的每个令牌条目都将包含random_salt和hashed_token.
在验证“记住我”登录cookie(应该包含用户标识和令牌)时,您需要遍历该用户标识的每个标记条目(通常只有一个条目,永远不会超过一个条目)并分别检查每个条目使用存储的随机盐: foreach (entry in stored_tokens_for_user) { if (entry.hashed_token == bcrypt(cookie.token,entry.random_salt)) return true; } return false; (如果您的数据库作为查询语法的一部分内置了对bcrypt的支持,您可以创建一个准备好的语句来为您执行此操作) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |