2

当用户登录并选中“记住我”框时,我会为它生成一个密钥(md5 上非常随机的数字)并保存在它的 cookie 中。如果用户未登录,我的代码会检查“记住我的密钥”cookie,如果它与用户匹配,则他已登录。

我的问题是,我如何阻止用户处理他们的记住我关键 cookie 并将其传递给他们的朋友?因为如果他们这样做,复制 cookie 的人将在不知道帐户密码的情况下登录,然后他们将无需购买即可访问高级帐户。

我无法将密钥绑定到 ip,否则记住我将无法正常工作,因为许多计算机经常更改 ip。我想保存用户代理和其他浏览器信息,你怎么看?

4

2 回答 2

6

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

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

于 2013-01-19T11:13:41.763 回答
0

我的问题是,我如何阻止用户处理他们的记住我关键 cookie 并将其传递给他们的朋友?

最好的解决方案是不要使用记住我: https ://www.owasp.org/index.php/Guide_to_Authentication#Remember_Me

如果您仍然想要,那么您可以检查请求者的浏览器和 ip,但您可能会遇到可用性问题。将并发会话数限制为每个付费用户 1 个可能会阻止您担心的漏洞利用。

于 2013-01-19T10:59:15.217 回答