当“忘记密码”功能可用时,如何保护密码安全

时间:2010-12-01 20:56:19

标签: security login membership forgot-password

我和一位同事正在讨论如何在我们公司的专有网络应用程序上实现“忘记密码”功能。

我们已经决定创建一个帐户,将有三个必需元素

1)屏幕名称
2)电子邮件地址(用于登录)
1)密码(显然,也用于登录。存储为单向哈希

获得该信息后,尝试注册的用户将收到一封包含链接和激活密钥的验证邮件。要激活他们的帐户,他们需要按照链接,输入激活密钥,然后重新输入他们的电子邮件和密码。如果一切都匹配那么presto!新用户帐户已激活。

帐户激活后,让我们说用户忘记了密码。关于如何处理这种情况,我们有两个想法。

创意1

      
  1. 用户点击“忘记密码”
  2.   
  3. 系统会提示用户输入其帐户的电子邮件地址
  4.   
  5. 如果电子邮件与活动的非关闭帐户匹配,则将临时密码发送到已经验证的电子邮件地址
  6.   
  7. 用户尝试使用临时密码登录
  8.   
  9. 如果临时密码与电子邮件地址匹配,则提示用户重置密码。防止完全登录,直到更换临时密码。
  10. 创意2

    这需要在注册期间收集秘密问题和秘密答案数据。

        
    1. 用户点击“忘记密码”
    2.   
    3. 系统会提示用户输入电子邮件地址并回答密码问题
    4.   
    5. 验证两者后,允许用户重置密码
    6. 关注

      我们担心的一个问题是(我们公司内部)多名员工会使用一个登录帐户。我们中的一些人认为将秘密问题方法作为一种选择。

      但是,通过电子邮件发送的密码(临时或非临时)将容易受到影响,因为电子邮件不安全。

      问题摘要

      考虑到内部操作限制(多人登录)这些想法中哪些是最安全和用户友好的选择?或者,既不充足?


      修改

      堆栈溢出是否可以通过评估答案来帮助我?下面表达的意见很少,但是没有任何关于答案质量的指示。

4 个答案:

答案 0 :(得分:1)

在我的系统中,当有人请求丢失密码时我:

  1. 我生成一个GUID并将其与请求的日期/时间一起存储在数据库中。
  2. 向用户发送带有编码GUID的链接,以便当他们点击链接时将其绑定到该GUID
  3. 确保GUID /链接尚未“已使用”。
  4. 确保请求不超过30分钟(出于安全考虑,他们只有一小段时间来使用激活链接 - 他们从请求密码屏幕上的消息中知道这一点)
  5. 如果所有这些条件都成立,我会让他们创建一个新密码。

    一般来说,虽然电子邮件并不十分安全,但如果某人的电子邮件帐户遭到入侵,您已经有了一个巨大的安全漏洞,但通过告诉他们他们只有30分钟重新激活他们的帐户,它会减少窗口当有人可能滥用这些信息时:它只能被使用一次,它会被用于一个已知的好的电子邮件地址,并且它只能使用30分钟...对于我所做的系统类型,这是足够安全的而没有负担用户(或管理员)太多了。

答案 1 :(得分:0)

我使用了发送到电子邮件的临时密码,虽然它不是最安全的。您还可以为临时密码添加时间限制,这将略微提高安全性。我认为多个安全问题,然后向电子邮件发送临时密码将是相当安全的。

答案 2 :(得分:0)

作为一个用户,我不喜欢安全问题,因为为了使它们真正安全,我必须非常难以记住答案。

这是我将使用的模式:

  1. 忘记密码链接将用户发送到嵌入了UID的网址
  2. 忘记密码页面会发送一封电子邮件,其中包含要在该页面上输入的代码
  3. 该代码仅在从具有正确UID的URL发布时才有效。
  4. 如果从有效的URL发布了有效代码,则会将用户发送到“重置密码”链接。
  5. 要记住的重要一点是,UID和代码之间的映射不应该是可预测的。

答案 3 :(得分:0)

公司内部网访问和登录过程的规则可能与从公共互联网访问的网站或帐户的规则不同。您可以拥有电子邮件地址以及用户员工/员工编号和安全通行证或卡序列号的一部分,或者使用IT支持为每个新用户发布的唯一且保密的登录ID。