如何防止破解者通过窃取Cookies获取登录访问权限
我试图找到解决方案来保护记住我的功能。 Cookie将被使用。
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的情况下获得访问权限):
1.在db用户表中,我放入了“Token”字段,它将携带salt值。
2.每次用户通过表单或通过cookie(自动登录)登录时,使用自动生成的值更新令牌。 另外,用新的散列更新密码字段。
3.现在用新值设置cookie。
4.以前的cookie不再有效。
5.假设黑客获得访问权限,他的访问权限将暂时存在,直到原始用户访问其帐户,并且无法进行重大更改,例如更改密码/电子邮件。
黑客和用户将分享第2步! 每当黑客登录时,由于多个帐户访问权限,用户将被拒绝访问,反之亦然。 这将表明帐户被盗,所以直到原始用户简单地去更改密码才会这么长。
这不是%100的解决方案,但会降低风险的可能性,并警告用户有另一个人使用同一个帐户。
我试图尽可能保持简单。
解决方案够好吗? 解决方案中是否存在重大缺陷?
你正在寻找的是session hijacking
预防。 这个链接会向你解释需要做什么。 没有必要在这里鹦鹉说什么已经说了,做了什么。 这是对来自The Open Web Application Security Project的插图的攻击描述。
我会尽量保持这一点,因为它可能会变得太长。
一种选择是在cookie中包含一些更多的识别数据,例如用户的IP地址(显然可能会更改)或浏览器的用户代理(实际上不应更改)。 你可以包括其他东西,如果你想,我现在只是使用这些,所以我可以保持它更短:)
encrypt ( (user-agent and/or ip) and hash(token) )
会给你一个可解密的字符串,你可以用substr()
一个已知长度来取回令牌,并将其他部分与用户的当前数据进行比较。
或者,
hash(user-agent and/or ip) + hash(token)
将允许您立即将令牌排序,然后仅对当前的用户代理和/或IP进行散列并将其与cookie值进行比较。
显然,这更多的是关于如何缩小黑客使用被盗令牌的可能性。 如果原始用户使用Firefox 3.5与某个用户代理,那么黑客也必须使用它。 如果它来自某个IP,则需要绕过,等等。
链接地址: http://www.djcxy.com/p/54745.html上一篇: How to Prevent Cracker Getting a Login Access via Stealing Cookies
下一篇: Class static?