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

Php 如何防止黑客通过窃取cookie获得登录访问权限,php,security,Php,Security,我正试图找到一个解决方案来保护记忆我的功能。将使用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 我开

我正试图找到一个解决方案来保护记忆我的功能。将使用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。在db用户表中,我放置了“Token”字段,该字段将携带salt值。

2.每次用户通过表单或cookie(自动登录)登录时,使用自动生成的值更新令牌。另外,用新的散列更新密码字段。

3。现在用新值设置cookie。

4.上一个cookie不再有效。

5。假设黑客获得了访问权限,在原始用户访问其帐户之前,他的访问权限将是临时的,并且无法进行重大更改,例如更改密码/电子邮件。

黑客和用户将共享第2步!每次黑客登录时,由于多个帐户访问,用户被逐出访问权限,反之亦然。这将表明帐户被盗,所以它不会这么长,直到原来的用户去改变密码

这不是一个100%的解决方案,但可以降低风险,并警告用户有其他人使用同一帐户

我正努力使它尽可能简单


这个解决方案足够好吗?解决方案中是否存在重大缺陷?

我将尽量简短,因为它很容易变得太长

一种选择是在cookie中包含更多的标识数据,例如用户的IP地址(显然可能会更改)或浏览器的用户代理(实际上不应该更改)。如果您愿意,您可以包括其他内容,我现在只使用这些内容,这样我就可以缩短它:)

将为您提供一个可解密字符串,您可以
substr()
从末尾减去已知长度以取回令牌,并将其他部分与用户的当前数据进行比较

或者

hash(user-agent and/or ip) + hash(token)
将允许您立即从末尾删除令牌,然后只对当前用户代理和/或IP进行散列,并将其与cookie值进行比较


显然,这更多的是关于如何缩小黑客使用被盗令牌的机会。如果原始用户使用Firefox3.5和某个用户代理,黑客也必须使用该代理。如果它来自某个IP,则需要绕过,依此类推。

您要寻找的是
会话劫持
预防。这将向您解释需要做什么。没有必要在这里重复已经说过和做过的事情。是对攻击的描述和插图。

插入关于“黑客”真正含义的标准讲座,没有人再听了。+1是对安全性的实际思考。这不是对您问题的真正回答,但您可以采取的额外安全措施是在运行关键任务之前询问用户的密码。更改密码、电子邮件等。。例如,第5点很难测量。假设用户在长假前最后一次使用您的服务,他可能在假期中没有互联网。那么,黑客可以享受更长的时间吗?@ajreal cookie盗窃事件是最小的。这也可以追溯到用户pc的安全性。我正在尽我最大的努力。保持简单和愚蠢,直到应用程序发布,然后根据结果,逐步升级。
hash(user-agent and/or ip) + hash(token)