我正在尝试遵循此规则:当用户更改密码时,他应该退出所有设备。
这意味着我必须将他的密码混合到cookie中?好的,这是我的代码:
$hash = hash('sha512', $id.$email.$password);
$db->query("update users set cookie ='$hash' where email = '$email'");
setcookie("login", $hash, time() + (20 ^ 20), "/");
好的我正在做的是正确的吗?其实我问的是因为我在某处读到了:
永远不要将密码放入cookie。
如果我想遵循上面的句子,那么我的规则将无效。事实上,我需要一个基于密码的cookie,当用户更改密码时会导致注销。
答案 0 :(得分:1)
这就是SESSIONS的用途。实际上它们是cookie,但只是保存在cookie中的浏览器ID。服务器有一个表,其中包含每个用户ID的会话。但是攻击者仍然可以复制id,但是他无法访问会话内容,因为它存储在服务器上。
<?php session_start; $_SESSION["pass"]="test";?>
你的哈希也是如此。攻击者可以复制已保存的ID。使用令牌。 当用户登录时,随机令牌被添加到数据库中并存储到会话中。如果您想踢出所有用户,只需删除这些令牌即可。有时需要额外的安全性交换令牌。这使攻击者更难,因为令牌只能工作几分钟。