【问题标题】:Why is "Forgotten Password" bad?为什么“忘记密码”不好?
【发布时间】:2011-03-06 05:17:26
【问题描述】:

我遇到了这个statement

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

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

【问题讨论】:

  • 用户:“我忘记了密码!”。服务器:“好的,你可以改一下。旧密码是什么?”用户:“...” ;)
  • 您可以检查“金钱”网站使用的安全性,例如西联汇款、Paypal、eBay 等。如果他们做某事,那一定足够好:),然后做你想做的事。
  • @helios 我不认为他们在“金钱”网站上使用的安全措施是设定标准的好方法。你应该明白为什么某个解决方案是最好的,那些公司并非完美无缺!

标签: php security authentication login passwords


【解决方案1】:

你的方法是绝对正确的,只要你不存储密码。

问安全问题绝对不好,因为它很容易通过猜测答案而被绕过。

稍微修改一下:尽管可能很难全部捕获,但您应该尝试禁止使用 mailinator 电子邮件帐户(或来自类似服务的电子邮件地址),因为 mailinator + 忘记密码 = 灾难。

【讨论】:

  • 在这种情况下,除了用户之外,该怪谁?
  • @fielding:绝对正确,但是-取决于网站-您不能(也不应该)期望公众对互联网安全有非常高的了解。
  • 没错,但在这种特殊情况下,我会说它是管理员的工作,而不是我们的工作。每个人都应该知道,如果您忘记了密码并无法访问您的电子邮件地址(这在某种程度上是假的),那它不仅仅是一个 oops-a-daisy。让它成为白痴证明,有人会成为一个更好的白痴;)
  • 同意避免安全问题...它们是错误的密码(不强制遵循包括大写、小写、特殊字符等在内的良好策略),带有“提示”以帮助攻击者猜对答案:)
【解决方案2】:

如果查理可以阅读爱丽丝的电子邮件,他还可以访问所有提供“丢失密码”功能的网站。

【讨论】:

  • 如果查理可以阅读爱丽丝的电子邮件,那么问题肯定不在于“丢失密码”功能,因为他可以使用爱丽丝的电子邮件注册任何具有虚假身份的网站。
  • 引用的声明说您可以将信息发送到用户过去提供的电子邮件。就像很多系统一样。系统依赖于您的电子邮件安全(这是合理的事情)。如果您破坏了您的电子邮件安全......好吧......非常抱歉。
  • @nico:这比 Charlie 访问 Alice 的所有现有用户帐户要小得多。问题非常是“丢失密码”功能;对于安全要求较低的环境,尤其是对于其他方法过于昂贵的免费服务,这是合理的。但对于任何涉及真金白银的事情,这应该是不可接受的。
  • @Michael Borgwardt:在涉及金钱的地方,您有信用卡号和安全码等,这是另一个安全级别。丢失密码功能对于“普通”网站是必要的,否则您将有很多用户生成新帐户只是因为他们不记得他们的密码......并且可能会因为系统告诉他们他们的电子邮件地址已经是而感到沮丧用过。
  • 这是一个非常有效的安全问题,但这不是提问者要问的。所引用的文本并不妨碍电子邮件验证本身的做法,并且以安全的方式解决此问题需要比在中等安全网站中更复杂的身份验证程序。
【解决方案3】:

最烦人的技术如下:单击忘记密码,系统要求您发送电子邮件并获取您自己的密码(许多用户将其用于色情及其网上银行;))以明文形式返回,而不是设置新密码.

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

正如我们已经做到的那样:永远不要返回“错误密码”之类的内容,因为这意味着至少用户名存在。

【讨论】:

    【解决方案4】:

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

    它建议反对的是允许用户在没有任何额外知识的情况下重置密码的做法,即类似按钮的东西可以重置密码,而无需强制用户单击其电子邮件中的链接。我不确定我是否见过这样的系统,但这肯定是个坏主意 =)。

    【讨论】:

      【解决方案5】:

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

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

      喜欢:

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

      这样一来,别人就无法确定邮箱地址是否在你的系统中!

      【讨论】:

      • 没有什么比登录失败更糟糕的是,系统没有通知您输入的电子邮件地址是正确的。请不要为成功和失败打印相同的文本,否则用户会讨厌你。因为,您知道,用户确实使用多个电子邮件地址,而用户确实忘记了他们的密码和登录名,甚至不知道他们使用哪个电子邮件地址注册了哪个地点。不要忘记:您的站点可能是世界上绝对最重要的东西对您而言,但对用户而言,它可能只是他不时使用的东西,并且不经常登录。
      • @Phliplip:他们应该等多久?等一下? 10分钟?他们尝试的每封电子邮件一小时?还是他们应该只输入所有电子邮件地址,然后仍然等待一个小时?如果他们打错了怎么办?帮助用户相处没有错。相信我,如果用户需要很长时间才能进入系统,如果他们想做的只是查看某处一分钟,他们会感到愤怒。他们也可以同时创建一个新的登录名,这可能不是您一开始想要的。
      • 很抱歉,我不同意 OregonGhost。 OWASP 表示,无论用户是否有错误的密码、错误的用户名等,都会显示相同的消息,因为黑客可以查明他们得到的信息不正确并正确地集中他们的黑客攻击。如果您提供相同的信息,黑客就很难尝试猜测哪些信息是错误的。如果权衡是访问符合 PCI 的站点,则用户可以针对任何登录错误处理相同的消息。
      • @Cen:不,他不是这么说的。他说如果在“忘记密码请求”之后在数据库中找到或未找到电子邮件,则给出相同的错误。由于@OregonGhost 所说的原因,这是不正确的。
      • @Cen:nico 是对的。我接受(尽管不喜欢)网站在尝试登录时会向您显示一般的“登录错误”消息。但是“忘记密码”是不同的,因为此时用户已经迷路了,需要一些帮助。请注意,为实际登录使用单独的登录名,而不是电子邮件地址,这实际上更安全,因为黑客可以发现系统使用了特定的电子邮件地址,但电子邮件地址不是登录名。但是,无论如何,用户往往会忘记登录名......
      【解决方案6】:

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

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

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

      【讨论】:

        【解决方案7】:

        这是一个笼统的陈述,如果您不了解所涉及的风险并且确定有净收益(就像生活中的大多数事情一样),这只是一个坏主意。

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

        按需将密码重置为随机值,然后将该值通过电子邮件发送给客户,从而有机会对个人登录进行拒绝服务攻击(在多次登录尝试失败后禁用帐户时也是如此) )。

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

        所有这些方法都将客户帐户的安全性委托给客户电子邮件系统(以及您的服务器和客户收件箱之间的所有其他电子邮件和网络组件),这充其量是非常容易泄漏的 - 当然这不是您可以做到的除非您控制所有基础架构,否则提供任何安全保证。

        C.

        【讨论】:

        • 我想我的解决方案(向用户发送链接以重置他们的密码)将落入您认为有风险的delegating the security of the customer account to the customers email system 领域。那么你提出什么替代方案?
        猜你喜欢
        • 2010-10-06
        • 2012-07-25
        • 2012-12-20
        • 2013-05-17
        • 2011-08-26
        • 2015-12-31
        • 1970-01-01
        • 1970-01-01
        • 2012-02-13
        相关资源
        最近更新 更多