如何防止破解者通过窃取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?