PHP“记住我”的安全漏洞?(PHP “Remember Me” security flaw?)

2019-08-05 08:15发布

我在编码“记住me'装备登录表单的中间,到目前为止我读过的教程(部分是为了确保我这样做是正确)都说沿存储在cookie中的加密密码以用户名。 然后,每次PHP会检查当前用户没有登录,检查他们的饼干和寻找那些价值。 如果用户名相匹配的密码,你就能加入。

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

我的登录系统使用会话跟踪当前的用户ID,并快速登录/ 1/0注销支票。 用户不能AFAIK编辑会话,所以这是安全的(如果不是的话,请让我知道)。 我想只是存储在cookie中的会话ID,以稍后恢复,但是这也并不安全。

我很在意我的用户的安全,我如何能够正确地保护自己的信息,同时仍保持正常运转的网站?

Answer 1:

通常,当被请求的服务器记住用户 ,它会发出正常的会话cookie旁边有一个额外的cookie,而这个新的字符串中包含的用户名和随机字符,这使得它难以猜测的合理费用。 这显然是保存在数据库中(出于安全考虑,您可能希望把它像一个密码,因此盐和哈希的话),并且用户使用相同的浏览器下一次连接时(假设旧的会话过期)的应用程序接收随机字符串,检查数据库,如果有一个匹配的用户进行身份验证。

一个替代方案是提前一定量的移动会话到期时间。

什么是这里的安全漏洞? 只要你使用一个很好的随机生成,可能发生的唯一的事情是,用户从访问一个共享的浏览器应用程序并没有手动注销何时结束。

正常的规则总是适用,因为你是在一个不安全的通道:使用HTTPS,否则谁您的计算机和服务器之间坐落在可以窃取cookie(或会话一个或记得,我的一个),并充当如果它是你的。

奖金,这个由杰夫·阿特伍德必读



Answer 2:

从未以任何方式(可用于登录加密的密码仍然是一个密码)上的客户端保存密码。

使用随机生成的密钥,安全地存储在服务器上。 这些按键可以在以后不同的是加密的密码,直到改变,这将是有效的予以撤销。

使用PHP可以产生这样的随机密钥md5(uniqid(mt_rand(), true)) 为了获得更好的安全储存它腌制,用dB散列。

实施例表:

login_keys (
  user_id int,
  key char(40), # sha1
  salt char(15)
)

另外请注意,你应该启用HTTP cookie的唯一选择。



Answer 3:

如果你想它的安全,不要让你的用户,让他们登录。

当设置会话时,请务必将ip地址绑定到会话ID,所以,如果有人会话后回升,它只能来自同一IP地址来实现的。 哟可以通过保持一个数据库(哈希)会话ID +哈希ipaddresses做到这一点。 我用PHPS功能http://php.net/manual/en/class.sessionhandler.php设置会话处理程序,并匹配与会议ipaddresses。



Answer 4:

在我自己的网站,我发现要解决它根本就没有记住密码,用户名只有最好的方式工作时,提供更快的登录就不是一个不太安全的一个我也遇到过同样的问题。 事实是,没有确保消防方式保持密码绝对安全。 除了与新的浏览器,用户可以拥有自己的浏览器记住它。

但是,如果你必须有一个保存的密码,试试这个:

有多个cookie,2将是最容易的,并使用一个用于加密的密码,而其他持有的加密密钥。 在数据库中的密码将举行进一步的加密密码,请使用您的存储加密密钥(S)获得。 当您准备检查密码,提取值和加密密码。

希望这是有益的。 祝好运!

编辑:我可能误会了这一点,如果用户仍然登录,这是很好的做法来存储会话变量。



文章来源: PHP “Remember Me” security flaw?