【问题标题】:Resetting passwords without emailing the user在不向用户发送电子邮件的情况下重置密码
【发布时间】:2011-02-08 19:15:30
【问题描述】:

我们需要为使用我们网站的用户提供一种重置密码的方法。典型的方法是向用户发送电子邮件并要求单击链接进行重置。

问题是我们不想仅仅为了重置密码而运行邮件服务器。有没有其他巧妙的方法来重置密码而无需邮寄给用户?

编辑:这适用于忘记密码的用户。

【问题讨论】:

  • 您打算什么时候重置密码?
  • 你的 ISP 是谁?大多数体面的主机都提供邮件中继,因此您只需将应用程序指向该服务器即可。
  • 为什么不使用免费的 gmail 帐户发送电子邮件?

标签: php email passwords


【解决方案1】:

我遇到了一个非常奇怪且要求很高的客户也遇到了同样的问题。该站点是一个公司内部网,可以通过远程办公人员的 VPN 访问。要求之一(用粗体写):

密码重置机制应该是方便的,而不是依赖电子邮件。必须方便地授予重置请求,并且需要证明网站在重置请求之前信任访问者

我最终做的是生成一个 Manderbolt (100x100) 供用户下载,作为他们的“重置”令牌,以及他们必须回答的一些秘密问题。要更改他们的密码,他们必须回答他们的问题并上传他们的分形(二次平面是根据他们的私人信息定义的,通过简单的散列来避免冲突)。

这满足了密码重置必须基于他们拥有以及他们知道的要求。如果他们丢失了分形或忘记了他们的秘密问题的答案,他们必须亲自到场重新设置密码。

不完全是防弹的,但它满足了当时的需求。挑战在于使分形独一无二(至少 30 像素是唯一的),因为大多数用户共享许多常见的私人数据(城市、州、区号等)。

编辑

分形(更确切地说,它的单向表示)也在其他地方使用。想想RFID + 摄像头

【讨论】:

  • 另外,生物识别技术也不是一种选择。
  • 使用分形肯定有风格,可能会给用户留下深刻印象,但一个简单的随机数也能起到同样的作用......
  • @Michael - 这不是我们使用分形的唯一用途:) 有些东西最好隐藏在普通视图中。
  • 我喜欢从用户数据生成分形的想法。相当有趣的数学应用。我想知道它多久制作一次真正有趣的东西......
  • @Kris.Mitchell - 加盐很有趣但相似,因为大多数员工共享共同的私人数据。正如我所说,它并不完全是防弹的。它确实有助于减轻 RFID 抢夺的情况,并且帮助一个熟悉用户并可以回答秘密问题的人,至少在要求的范围内。
【解决方案2】:

使用OpenID。那么恢复用户密码的问题就变成了 OpenID 服务提供商的问题。你的用户会很感激他们不需要记住另一个臭密码。

【讨论】:

    【解决方案3】:

    您可以立即使他们当前的密码失效,并要求他们在下次登录时更改密码。几个密码重置系统可以做到这一点。

    编辑: 因为这适用于忘记密码而不是强制更改的用户,所以您应该直接将他们带到他们忘记密码时无论如何都会通过电子邮件发送给他们的链接.让他们输入他们注册时使用的电子邮件地址以及您可以用来验证的其他一些数据。基本上,其他答案所说的。

    【讨论】:

    • 考虑到需求,这可能是最优雅的解决方案。
    • 请注意:如果用户忘记密码,这将无济于事,因为您首先需要原始密码。
    • @Adam - 是的,你是对的。我不确定重置的上下文是什么。如果是“忘记密码?”链接,那么像其他答案一样的安全问题和个人详细信息会更好。但如果强制用户每 X 天重置一次密码,这是我的建议。
    • 这是为忘记密码的人准备的
    • 密码重置被发送到电子邮件而不是直接作为链接提供的唯一原因是由于邮件密码提供了额外的安全性。在这种情况下,任何知道安全问题的人都可以重置密码。
    【解决方案4】:

    必须有一些类使用套接字直接与远程 SMTP 服务器(例如,ISP 的 SMTP 服务器)通信 - 只需找到这样的类,您就不必运行私有 SMTP 服务器来发送电子邮件。

    【讨论】:

      【解决方案5】:

      您需要某种方式来验证用户的身份,以防止其他人重置密码。也许你可以让他们在注册时设置一些问题(比如母亲的娘家姓、最喜欢的颜色)。他们只有在正确回答问题后才能重置密码。

      【讨论】:

      • 啊,是的,古老的“不安全问题”......为什么不直接问“你保证你真的是这个用户而不是邪恶的黑客?Y/N”
      • 我同意,但“母亲的娘家姓”不是一个可接受的安全问题,也不是她们最喜欢的颜色。
      • 你会提出什么问题?
      • 让用户选择问题和答案。把枪给他们。
      【解决方案6】:

      您可以使用标准邮件发送新密码:-)。

      通常您需要验证尝试重置密码的用户是最初注册的用户。最简单的方法是将密码重置链接发送到注册时使用的电子邮件。或者,您可以提出某种安全问题,这将允许重置密码,但大多数人会选择一些非常蹩脚的东西,而您最终会使用很容易窃取身份的服务器。

      【讨论】:

      • 您知道如何在您的网络服务器中运行标准邮件服务器吗? :)
      • 只要使用你的发行版的默认值,例如。 apt-get install exim4.
      【解决方案7】:

      对此的通常答案是某种形式的安全问题。如果您没有让用户跨越的障碍,您可以打开系统以允许几乎任何人重置密码。

      【讨论】:

        猜你喜欢
        • 2011-04-16
        • 2019-02-15
        • 2015-03-12
        • 2011-12-29
        • 2014-01-01
        • 2021-03-08
        • 2013-12-18
        • 2015-08-13
        • 2012-06-15
        相关资源
        最近更新 更多