【发布时间】:2011-05-18 18:15:53
【问题描述】:
我和一位同事正在讨论如何在我们公司的专有网络应用程序上实现“丢失密码”功能。
我们已经决定创建一个帐户需要三个必要的元素
1) 屏幕名称
2) 电子邮件地址(用于登录)
1) 密码(显然,也用于登录。存储为单向哈希)
一旦我们获得该信息,尝试注册的用户将收到一封包含链接和激活密钥的验证电子邮件。要激活他们的帐户,他们需要点击链接,输入激活密钥,然后重新输入他们的电子邮件和密码。如果一切都匹配然后presto!一个新的用户帐户被激活。
激活帐户后,假设用户忘记了密码。对于如何处理这种情况,我们有两个想法。
想法 1
- 用户点击“忘记密码”
- 系统会提示用户输入其帐户的电子邮件地址
- 如果电子邮件与活动的、未关闭的帐户匹配,则将临时密码发送到已验证的电子邮件地址
- 用户尝试使用临时密码登录
- 如果临时密码与电子邮件地址匹配,提示用户重置密码。在替换临时密码之前阻止完全登录。
想法 2
这需要在注册期间收集秘密问题和秘密答案数据。
- 用户点击“忘记密码”
- 提示用户输入电子邮件地址并回答秘密问题
- 验证两者后,允许用户重置密码
担忧
我们担心的一个问题是(在我们公司内部)多名员工会使用一个登录帐户。我们中的一些人认为这消除了作为一种选择的秘密问题方法。
但是,由于电子邮件不安全,通过电子邮件发送的密码(无论是否为临时)都容易受到攻击。
问题总结
考虑到内部操作限制(多人一次登录),这些想法中哪一个是最安全和用户友好的选择?或者,两者都不够?
编辑
堆栈溢出能否通过评估答案来帮助我?下面表达的意见很少,但 SO 没有任何迹象表明答案的质量。
【问题讨论】:
-
如果多人共享一个帐户,如果他们碰巧忘记了密码,他们只需询问帐户中的其他人。您可以手动处理该帐户中的每个人都忘记的情况。
-
是的。不过,这主要是内部发生的。 IE:0-15 个人可以知道登录到 SuperAdmin 帐户的任何地方。忘记密码功能不仅会被公共用户使用,如果有人在度假、被解雇、退出等,也会在内部使用。
-
为什么需要自动化呢?当然,您对数据库具有 root 访问权限,并且可以手动执行必要的操作。
-
它需要自动化,这样设计人员就可以访问帐户,而无需开发人员访问数据库。此外,它需要自动化,以便我们能够提供及时的支持(即:如果我们接到一个电话,要求我们在三年前建立的网站而该开发人员已不再与我们在一起。)
-
为什么要拥有超级管理员帐户而不是拥有管理员角色以便每个用户都有自己的帐户?
标签: security login membership forgot-password