为什么不发送明文恢复密码?

信息安全 验证 密码
2021-08-22 16:58:35

似乎plaintextoffenders.com认为发送明文恢复密码是错误的。相反,设置密码的链接更好。但是有什么区别呢?如果用户点击链接并设置密码,或获取密码、登录并更改密码,危险似乎是一样的。如果有人在点击链接或登录和更改密码之间截获电子邮件 - 他们都可以冒充用户。

为了清楚起见,我指的是一个新的临时密码。只有密码哈希(PBKDF2、scrypt、...)存储在服务器上。

编辑

既然有人问我为什么我认为plaintextoffenders 包含新密码,请看一下。目前,第5 个第 6 个第 7 个第 8 个是明确的新密码。

2个回答

如果用户点击链接并设置密码,或获取密码、登录并更改密码,危险似乎是一样的。

根据我看过的所有帖子,我认为问题在于“并改变它”。我看到的所有电子邮件都没有表明密码是临时的,需要更改。不想费心自己创建一堆帐户,我会保守地假设,如果电子邮件没有说您需要更改密码,则该网站不会强迫您在登录后更改密码。

您是正确的,只要密码具有足够的熵,临时密码和重置链接之间就没有真正的区别如评论中所述,如果密码太短并且用户在登录前等待一段时间,则可能容易受到暴力破解。由于密码字段无论如何都应该允许粘贴,所以一个 20 个字符的字母数字临时密码就可以了。重置链接和临时密码的实现几乎相同,这实际上只是 POST 和 GET 之间的区别。

之所以向用户发送他们当前的密码明文不好归结为“密码必须存放在这样一种方式,没有人在服务器端应该永远能够检索用户的明文密码,一旦他们进入它”(这意味着根, 也)。首先对密码进行哈希处理的原因正是因为唯一可能知道密码的人就是输入密码的用户。这是确保用户不能以其他人知道他们的密码为由拒绝任何行为的唯一方法。

(有关密码散列如何工作以及为何如此重要的更多历史信息,请参阅我对为什么 MD5 散列从 $1$ 和 SHA-512 从 $6$ 开始的回答?它本身不是弱点吗?

向用户发送一个的临时密码可以很好地回避问题,但这至少会产生其他两个问题,正如 Troy Hunt 在他的博客https://www.troyhunt.com/everything-you-ever-wanted-to-know/中提到的那样(在 plaintextoffenders 网站上的开发人员常见问题解答第 9 项中引用:http: //plaintextoffenders.com/faq/devs,在问题本身的评论中提到):

  1. 用户会立即使用其正常密码锁定其帐户,如果他们不是希望重置密码的人,则会立即引发拒绝服务 (DOS) 攻击,并且
  2. 站点期望接收临时密码的登录页面无法知道它是临时密码,如果没有正确实施,这可能会导致临时密码在此上下文中的持续时间超过可接受的时间。

为避免这些问题,密码重置登录页面与正常登录过程分开,具有可通过 https: URL 强制执行的秘密值,并且在重新建立帐户所有权之前不会使忘记的密码无效通过电子邮件与用户交换此值。