我正在寻找一种保护“记住我”功能的解决方案。将使用Cookies。
function enc($string) {
$slat = "%32!@x"; //can be auto-generated
$hash = sha1(md5($slat.$string)).md5($string).sha1(md5(md5($string)));
return $hash
}
echo enc("password"); //store user's password in db
我开始思考:“如果黑客窃取了我的成员的cookie会怎么样!”在这种情况下,黑客将一直拥有访问权限,直到黑客或原始用户注销。除了最后一次登录之外,没有证据表明账户被黑客攻击。在这种情况下,每次原始用户使用“记住我”登录时,黑客都将始终具有访问权限,直到原始用户更改密码。
假设黑客无法获得密码。
解决方案(如何防止黑客窃取用户的cookie):
1. 在数据库用户表中,我放置了一个“令牌”字段,其中将携带盐值。 2. 每次用户通过表格或通过cookie(自动登录)登录时,都更新具有自动生成值的令牌。同时,使用新哈希更新密码字段。 3. 现在使用新值设置cookie。 4. 以前的cookie不再有效。 5. 假设黑客已经获得了访问权限,他的访问权限将是临时的,直到原始用户访问他的账户,并且将无法进行重大更改,例如更改密码/电子邮件。
黑客和用户将共享第2步!每当黑客登录时,由于多个账户访问,用户会被踢出访问,反之亦然。这将表明账户被盗用,因此原始用户很快就会去更改密码。
这不是100%的解决方案,但可以降低风险并警告用户有另一个人正在使用同一账户。
我试图让它尽可能简单。
这个解决方案足够好吗?解决方案中是否存在重大缺陷?