PHP "Remember Me"安全漏洞?

标签 php security authentication remember-me

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

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

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

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

最佳答案

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

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

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

由于您处于不安全的 channel 上,因此正常规则始终适用:使用 HTTPS,否则位于您的计算机和服务器之间的任何人都可以窃取 cookie( session cookie 或记住 -我一个)并表现得就像是你一样。

Bonus, this must-read by Jeff Atwood

关于PHP "Remember Me"安全漏洞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14130888/

相关文章:

php - $_GET URL 来自 ?url=http ://google. com

php - 如何将事件目录链接到网页?

ios - MGTwitterEngine for iOS : how to get accessToken? 错误 401

c# - 根据 JWT 身份验证 token 中的声明验证请求中的 IP

ios - 火力地堡 + swift : Bypass User Login Screen

php - 创建新的主记录时填充多个表

java - 用 Java 压缩 用 PHP 解压

php - 匹配包含 "XYZ"并且不以冒号开头的单词

linux - 如何在嵌入式设备上实现网络服务?

ios - 在 iOS 源代码注释中包含敏感信息是不好的做法吗?