我想要为用户检查自动登录选项。基本上这意味着 cookie 将存储在客户端。
现在的问题是,如何确保其安全,以便 cookie 不会被欺骗/修改。
我的一位朋友建议使用一个数据库表来存储 session_id、用户的 ip、浏览器信息等,然后在用户再次访问该网站时比较所有这些信息。
我觉得单独一张桌子有点太麻烦了。还有其他方法吗?也许用代币或类似的东西?
您越想要这个臭名昭著的 cookie 的安全,它给您带来的麻烦就越大。如果您的用户应该特别安全,您将不得不采用最麻烦的方法。
如果您想尽可能安全,您应该只接受带有 https 的 cookie。如果 cookie 通过 http 被接受,它就可能被嗅探和窃取。
我建议 cookie 根本没有用户数据(如您所建议的令牌)。不幸的是,这将需要另一张桌子。当用户登录并选择“保持登录”时,在此表中创建一个条目。该条目可以是任何无意义的值(例如md5(uniqid('', true));
。该令牌在数据库中可以是唯一的,并映射到用户的 ID。
当用户访问您的网站时,您可以检查该 cookie 的值并获取其所属的用户并登录。此时,您销毁旧令牌并创建一个新令牌。 “毁灭”可以有很多含义。您可以将其从数据库中完全删除,或者设置一个禁用该令牌的标志。您可能希望允许多次使用同一个令牌,以防收到 cookie 但由于某种原因身份验证未通过,但我认为这是不安全的。您可能还想存储令牌的时间戳,并且仅在某个有限的时间段(例如 30 天)内才接受它。
正如您的朋友指出的,您可以存储其他信息,例如用户代理、IP 地址等,但即使使用相同的浏览器(尤其是移动设备),并且如果因此不接受用户的持久登录,这些信息也可能会发生变化,这可能会给他们带来不和谐和不便。
如果您确实不想创建另一个表,那么您将必须存储某种方法来从 cookie 值获取用户的 ID。这不太安全。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)