当用户登录并检查“记住我”框时,我会为其生成一个密钥(md5上的随机数字)并保存在其中。如果用户未登录,我的代码会检查“记住我的密钥”cookie,如果它与用户匹配,则表示他已登录。
我的问题是,如何阻止用户处理他们记住我的密钥cookie并将其传递给他们的朋友?因为如果他们这样做,复制cookie的人将在不知道帐户密码的情况下登录,然后他们将在不购买的情况下访问高级帐户。
我无法将密钥绑定到ip,否则记住我将无法正常工作,因为很多计算机经常更改ips。我想保存用户代理和其他浏览器信息,你觉得怎么样?
答案 0 :(得分:6)
您可以通过每次使用时重新生成cookie的密钥来检测cookie的共享。如果有人向其他人提供了一个记住我的cookie(或者它被盗了)并且他们都使用了它,那么他们在使用cookie后最终会得到不同的密钥。
仅允许每个帐户最近生成的密钥。如果有人使用与数据库值不匹配的密钥,则使与该用户关联的所有会话无效。
答案 1 :(得分:0)
我的问题是,如何阻止用户处理他们记住我的密钥 cookie并将其传递给他们的朋友?
最佳解决方案是不要记住我: https://www.owasp.org/index.php/Guide_to_Authentication#Remember_Me
如果您仍然想要,那么您可以检查请求者的浏览器和IP,但可能您的可用性问题。将每个付费用户的并发会话数限制为1可能会阻止您关注的漏洞利用。