选择md5的位置(用户识别,记住我哈希)

时间:2014-01-05 14:36:39

标签: php mysql

我正在为框架构建一个用户系统插件,但我目前设置它的方式并不能让我满意。当“记住我”框被选中时,我创建了一个cookie

setcookie('rmb', md5('salt'.$id), ...);

有一些我不喜欢的事情。当我从这个cookie重新创建会话时,我会执行以下操作

$db->prepare('SELECT id FROM users WHERE md5(CONCAT("salt",id)) = ?')
   ->execute([$_COOKIE['rmb']])
   ->fetch();

这似乎没问题,但如果我解释一下这是我得到的问题

enter image description here

非常低效,可能会持续数小时。除了使用md5进行散列非常不安全之外,这个系统似乎并不可靠。你们能否给我一些关于如何有效和安全地从记住我的cookie哈希中识别用户的一些指示?

1 个答案:

答案 0 :(得分:3)

我认为你可以创建一个challenge客户端应该在后续请求中作为cookie发送。当用户登录时:

setcookie('username', put_username_here, ...);
setcookie('challenge', long_random_char_sequence, ...); 
// UPDATE users SET challenge = ... WHERE username = ...

当用户再次连接时:

// SELECT ... FROM users WHERE username = $_COOKIE['username'] AND challenge = $_COOKIE['challenge']

这不会编译,没有输入清理等等......这只是您可能尝试实施的工作流程。

如果您想做得更好,请参阅this