PHP“记住我”安全漏洞?

2024-04-23

我正在编写一个配备“记住我”的登录表单,到目前为止,我读过的教程(部分是为了确保我做得正确)都说将加密的密码存储在 cookie 中与用户名。然后,每次 PHP 检查当前用户是否未登录时,检查他们的 cookie 并查找这些值。如果用户名与密码匹配,则您已加入。

对我来说,这是一个巨大的安全漏洞。如果有人要破解数据库或以某种方式访问​​加密密码,他们甚至不需要破解它们。只需设置您自己的 cookie 即可。我是正确的,还是只是偏执?

我的登录系统使用会话来跟踪当前用户 ID,并使用 1/0 进行快速登录/注销检查。 AFAIK 用户无法编辑会话,因此这是安全的(如果不是,请告诉我)。我正在考虑将会话 ID 存储在 cookie 中,以便稍后恢复它,但这也不安全。

我非常关心用户的安全,如何在保持网站正常运行的同时正确保护他们的信息?


通常当服务器请求记住用户,它会在normal会话 cookie,这个新字符串包含用户名和合理数量的随机字符,使其无法被猜测。这显然保存在数据库中(出于安全原因,您可能希望将其视为密码,从而对其加盐和散列),并且下次用户使用同一浏览器连接时(假设旧会话已过期),应用程序会收到随机字符串,检查数据库,如果存在匹配,则对用户进行身份验证。

另一种方法是将会话过期时间提前一定时间。

这里有什么安全漏洞?如果您使用良好的随机生成器,唯一可能发生的情况是用户从共享浏览器访问应用程序并且在结束时不会手动注销。

The normal规则始终适用,因为您处于不安全的通道上:使用 HTTPS,否则位于您的计算机和服务器之间的任何人都可以窃取 cookie(会话 cookie 或会话 cookie)记住账号一)并表现得就像是你一样。

额外奖励,这是杰夫·阿特伍德的必读之作 https://stackoverflow.com/a/477578/315306

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP“记住我”安全漏洞? 的相关文章

随机推荐