如何防止黑客通过窃取Cookie获取登录访问权限

8

我正在寻找一种保护“记住我”功能的解决方案。将使用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%的解决方案,但可以降低风险并警告用户有另一个人正在使用同一账户。
我试图让它尽可能简单。
这个解决方案足够好吗?解决方案中是否存在重大缺陷?

2
插入有关“黑客”真正含义的标准讲座,但现在没有人再听了。 - Tom Zych
2
对于安全性的实际思考,加1。 - Pekka
@GolezTrol:感谢您的关注。链接1链接2 - Tom Zych
@Tom,根据那个定义,我自认为是一个相当厉害的黑客。但另一方面,语言是会演变的,如果每个人都认为骇客就是指攻击者,包括攻击者自己,那么我们这些真正的黑客也许需要为自己找一个新的称呼。顺便说一下,Link 1的作者建议学习HTML,但他似乎在正确使用UTF-8编码方面遇到了一些问题。;-) - GolezTrol
1
@ajreal 饼干被盗的事件很少发生。这也与用户电脑的安全有关。我正在尽我所能。在应用程序发布之前,保持简单和愚蠢,然后根据结果逐步升级。 - user311509
显示剩余2条评论
2个回答

4

1

我会尽量简短地表述,因为它很容易变得过长。

一种选择是在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,则需要绕过该IP等。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接