我们应该使用什么技术来防止通过粘贴cookie来自动登录?


what techniques should we use to prevent auto-login by pasting cookies?

我读了http://www.codinghorror.com/blog/2008/08/protecting-your-cookies-httponly.html

登录一个网站,复制要点值,然后将它们粘贴到另一个浏览器运行在另一个浏览器上电脑。这就是所有需要的。这是真让人大开眼界。

我的问题是,如果我们使用php/aspnet会话,这种方法是否也有效。

如果它确实起作用,我们(作为web开发人员)可以使用什么技术来防止这个把戏起作用?基本上,我不希望用户能够通过粘贴cookie来登录他的帐户,密码是必须的。

如果以上是不可能的,这是否意味着,即使是谷歌的产品,如Gmail,我将有一些方法登录到我的帐户,而不需要我的密码?

会话是会话-通过在cookie中存储ID令牌来完成。您无法阻止cookie在浏览器之间被手动复制。

你可以尝试做一些事情,比如在他们登录时记录原始的User-Agent字符串,并每次进行比较(如果他们使用Firefox登录,然后突然使用Opera, hmmmmmmmmm)。IP地址也是一样…但是IP地址对于移动用户和使用多主机代理服务器系统的人来说是有问题的,比如美国在线之类的。它们的IP可能会因为每个请求而改变。

没有万无一失的方法来防止cookie共享无法绕过(更改浏览器的UA,使它们都声称是单一类型/版本),或产生假阳性(由于代理导致的IP更改)。

作为一个可以通过HTTP成功捕获任何cookie的软件的创建者,如果您想要安全,这里有一些提示:

-在可能的情况下使用HTTPS,以防止其他人首先捕获该cookie。

你的问题的答案是:没有一个具体的方法。你可以让它更困难,这也会让你的工作(和你的服务器)更困难。

- cookie在服务器端过期一段时间后,所以即使用户复制粘贴cookie,它也不会是一个有效的。

-保存一些元数据与cookie,如远程IP和用户代理字符串或其他一些头。

这些是你可以使用的最好和最直接的提示,但要记住,有经验的用户可以克服大多数这些问题。只是不要把任何关于安全的事情留给客户端,在服务器端完成它是一条黄金法则。

我不能肯定地说,如果这是一个问题与php/asp.net会话。一种防止的方法是在cookie中添加IP验证,如果它是从一个不同于创建它的IP发送的,则将其抛出到login。