我正在为一个框架构建一个用户系统插件,但是我目前设置它的方式并不满足我的需求。当选中“记住我”框时,我会创建一个cookie
setcookie('rmb', md5('salt'.$id), ...);有几件事我不喜欢。当我从这个cookie重新创建一个会话时,我执行以下操作
$db->prepare('SELECT id FROM users WHERE md5(CONCAT("salt",id)) = ?')
->execute([$_COOKIE['rmb']])
->fetch();这听起来不错,但如果我解释一下这个问题,这就是我得到的

效率很低,可能会运行几个小时。除了md5非常不安全之外,这个系统看起来并不可靠。你们能给我一些关于我如何从记忆-我的曲奇哈希有效和安全地识别用户的一些建议吗?
发布于 2014-01-05 14:44:51
我认为您可以创建一个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。
https://stackoverflow.com/questions/20934801
复制相似问题