0

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

我们已经决定创建一个账户需要三个必要的元素

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

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

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

理念一

  1. 用户点击“忘记密码”
  2. 提示用户输入其帐户的电子邮件地址
  3. 如果电子邮件与活动的、未关闭的帐户匹配,则将临时密码发送到已验证的电子邮件地址
  4. 用户尝试使用临时密码登录
  5. 如果临时密码与电子邮件地址匹配,则提示用户重置密码。防止完全登录,直到临时密码被替换。

想法 2

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

  1. 用户点击“忘记密码”
  2. 提示用户输入电子邮件地址并回答秘密问题
  3. 在验证两者后,然后允许用户重置密码

关注点

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

但是,由于电子邮件不安全,通过电子邮件发送的密码(临时或非临时密码)很容易受到攻击。

问题总结

考虑到内部操作限制(多人单次登录),这些想法中的哪一个是最安全和用户友好的选择?或者,两者都不够?


编辑

堆栈溢出可以通过评估答案来帮助我吗?下面表达的意见很少,但SO没有任何迹象表明答案的质量。

4

4 回答 4

1

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

  1. 我生成一个 GUID 并将其与请求的日期/时间一起存储在数据库中。
  2. 向用户发送一个带有 GUID 编码的链接,以便当他们单击该链接时,它会将他们与该 GUID 联系起来
  3. 确保 GUID/链接尚未被“使用”。
  4. 确保请求不超过 30 分钟(出于安全目的,他们只有一小段时间使用激活链接 - 他们从请求密码屏幕上的消息中知道)

如果所有这些条件都成立,我让他们创建一个新密码。

一般来说,虽然电子邮件不是非常安全,但如果某人的电子邮件帐户被盗,你已经有一个巨大的安全漏洞,但是告诉他们只有 30 分钟的时间重新激活他们的帐户,它会减少有人可以使用的窗口滥用信息:它只能使用一次,它会发送到一个已知良好的电子邮件地址,并且只能使用 30 分钟......对于我所做的系统类型,这足够安全,不会给用户带来负担(或管理员)太多。

于 2010-12-02T18:35:28.010 回答
0

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

于 2010-12-01T21:03:35.467 回答
0

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

这是我将使用的模式:

  1. 忘记密码链接将用户发送到其中嵌入了 UID 的 URL
  2. 忘记密码页面会发送一封电子邮件,其中包含要在该页面上输入的代码
  3. 该代码仅在从具有正确 UID 的 URL 发布时才有效。
  4. 如果从有效 URL 发布有效代码,用户将被发送到重置密码链接。

要记住的重要一点是,UID 和代码之间的映射不应该是可预测的。

于 2010-12-01T21:07:11.460 回答
0

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

于 2010-12-02T16:11:32.757 回答