Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 选择md5(记住我散列中的用户识别)的位置_Php_Mysql - Fatal编程技术网

Php 选择md5(记住我散列中的用户识别)的位置

Php 选择md5(记住我散列中的用户识别)的位置,php,mysql,Php,Mysql,我正在为一个框架构建一个用户系统插件,但是我目前设置它的方式并不满足我。选中“记住我”框后,我创建了一个cookie setcookie('rmb', md5('salt'.$id), ...); 有几件事我不喜欢。当我从这个cookie重新创建会话时,我执行以下操作 $db->prepare('SELECT id FROM users WHERE md5(CONCAT("salt",id)) = ?') ->execute([$_COOKIE['rmb']]) -&g

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

setcookie('rmb', md5('salt'.$id), ...);
有几件事我不喜欢。当我从这个cookie重新创建会话时,我执行以下操作

$db->prepare('SELECT id FROM users WHERE md5(CONCAT("salt",id)) = ?')
   ->execute([$_COOKIE['rmb']])
   ->fetch();
这似乎没问题,但如果我解释这个问题,这就是我得到的


效率极低,可能会运行数小时。除了使用md5进行散列非常不安全之外,这个系统看起来确实不可靠。你们能不能给我一些建议,告诉我如何高效、安全地从“记住我”cookie散列中识别用户?

我想你们可以创建一个
挑战,客户端应该在后续请求中作为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']
这不会编译,没有输入清理,等等。。。这只是您可能尝试实施的工作流


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

另一个注意事项:您的sql不会生成与php相同的字符串。
md5(CONCAT(“salt”,id))=?
将在任何一个匹配时返回所有用户,不是吗?当哈希匹配时,这相当于
,其中1=1
。要识别任何一个用户,需要将该散列与列值(而不是计算的标量)进行比较。