2013-01-19 38 views
2

当用户登录并检查“记住我”框时,我生成一个密钥(在MD5上非常随机的数字),并保存在它的cookie中。如果用户没有登录,我的代码检查“记住我的密钥”cookie,如果它与用户匹配,那么他已登录。Remember me cookie伪造

我的问题是,如何阻止用户应对他们的记住密钥cookie并将其传递给他们的朋友?因为如果他们这样做,那么复制cookie的人将会在不知道帐户密码的情况下登录,然后他们将访问高级帐户而不购买它。

我不能将密钥绑定到IP,否则记住我不会很好,因为许多计算机经常更换ips。我虽然关于保存用户代理和其他浏览器信息,你觉得呢?

+0

同样的道理:什么会阻止用户给他们的用户名和密码?你假设你的用户在一起工作,共享UN/PW似乎比复制一个即将过期的cookie更容易... –

+0

是的,但给这个cookie而不是密码,他可以发送cookie到很多人,并且没有人能够更改密码并获取它自己的帐户,只有主要所有者 –

+0

然后将每个付费用户的并发会话数限制为1。 – 2013-01-19 11:11:52

回答

6

您可以通过在每次使用cookie时重新生成cookie的密钥来检测cookie的共享。如果有人给别人(或者它被盗)提供了一个记得我的cookie,并且他们都使用它,那么他们在使用他们的cookie后最终会得到不同的密钥。

只允许为每个帐户最近生成的密钥。如果有人使用与数据库值不匹配的密钥,则使与用户关联的所有会话无效。

+0

好吧,好主意,我认为这是解决方案! –

0

我的问题是,我该如何阻止用户将他们记得我的密钥 cookie并将其传递给他们的朋友?

最好的解决办法是不使用记得我: https://www.owasp.org/index.php/Guide_to_Authentication#Remember_Me

如果你仍然想,那么你可以检查请求者浏览器和IP,但随后也许你有使用性的问题。将并发会话数限制为每个付费用户1个可能会阻止您关心的漏洞利用。

+0

是的,就像用户更新浏览器时一样(铬几乎是每一次周),但我不想删除记住我的功能,这是我的网站非常重要 –