为什么“忘记密码”不好?

时间:2010-06-21 08:49:21

标签: php security authentication login passwords

我遇到了这个statement

  

不要使用“忘记密码”   功能。但如果必须,请确保   你只是提供   给实际用户的信息,例如   使用电子邮件地址或质询   问题是合法用户   已经提供过去;不要   允许当前用户更改此设置   身份信息直到正确   已提供密码。

有人可以澄清为什么忘记密码会有风险吗?我计划通过向用户发送电子邮件中的链接来重置密码来处理它,但不会向他们提供旧密码(因为它无论如何都是哈希),并且在重置时不会要求他们提供旧密码。我的做法有风险吗?

7 个答案:

答案 0 :(得分:12)

只要您不存储密码,您的方法就完全正确。

提出安全问题绝对是错误的,因为它只是通过猜测答案而被绕过。

只需稍加编辑:虽然可能很难捕获所有这些内容,但您应该尝试禁止使用mailinator电子邮件帐户(或来自类似服务的电子邮件地址),因为mailinator +忘记了密码=灾难。

答案 1 :(得分:4)

如果Charlie无法阅读Alice的电子邮件,他还可以访问所有提供“丢失密码”功能的网站。

答案 2 :(得分:3)

最烦人的技巧如下:你点击忘记密码,被要求你发电子邮件并获得你自己的密码(许多用户用于色情及其网上银行;))以明文形式返回,而不是设置一个新密码

我会复制大玩家的方法,比如paypal或google。我认为他们现在应该做什么。最常见的情况应该是:忘记密码 - 获取指向您的电子邮件的链接,您可以在其中设置新密码或生成随机,安全的密码(用户将立即将其更改回1234)。

因为我们已经存在:永远不会返回类似“错误密码”的内容,因为这意味着至少存在用户名。

答案 3 :(得分:2)

你的方法对我来说听起来很安全:)当然它应该是一次性的链接!

此外,“成功”和“未找到电子邮件地址”消息/页面应该相同。并有一个匿名文本。

像:

“如果您的邮箱地址在我们的系统中,我们会向您发送电子邮件”

通过这种方式,某人将无法确定您的系统中是否有电子邮件地址!

答案 4 :(得分:2)

向用户发送电子邮件中的链接实际上符合给出的指导。

它提出的建议是允许用户重置密码而不必具备任何其他知识的做法,例如可以重置密码而不强迫用户点击其电子邮件中的链接的按钮。我不确定我是否见过这样的系统,但肯定是一个坏主意=)。

答案 5 :(得分:2)

只要您将链接发送到您存储在系统中的电子邮件,那么您应该没问题 - 这就是我对系统的期望。

我还会将“您已更新密码”的确认信息发送到同一地址。

此外,如果用户更改了他们的电子邮件地址,您可以考虑向地址发送电子邮件,说明已将其更改为 new 。或许有点烦人,但它会提供一个额外的点,有人可以发现他们的帐户是否已被泄露。

答案 6 :(得分:2)

如果您不了解所涉及的风险并且确信存在净收益(与生活中的大多数事情一样),这只是一个彻底的陈述,只是一个坏主意。

您绝不应以可恢复的形式存储密码。即使允许客户在您的系统上存储提示,也会使客户面临风险。密码必须始终使用不可逆机制存储 - 即散列。鉴于这种情况,您无法恢复客户的旧密码并将其发送给他们。

按需将密码重置为随机值,然后通过电子邮件将该值发送给客户,可以针对个别登录执行拒绝服务攻击(在多次登录尝试失败后禁用帐户的情况也是如此) )。

只留下为客户生成备用登录信息并通过电子邮件发送给他们的选项 - 并标记该帐户以强制客户在下次登录时选择新密码。

所有这些方法都将客户帐户的安全性委托给客户电子邮件系统(以及服务器和客户收件箱之间的所有其他电子邮件和网络组件),这些组件最多可能非常漏洞 - 当然,这不是任何事情都可以提供任何安全保障,除非您控制所有基础设施。

下进行。