我和一位同事正在讨论如何在我们公司的专有网络应用程序上实现“忘记密码”功能。
我们已经决定创建一个帐户,将有三个必需元素
1)屏幕名称
2)电子邮件地址(用于登录)
1)密码(显然,也用于登录。存储为单向哈希)
获得该信息后,尝试注册的用户将收到一封包含链接和激活密钥的验证邮件。要激活他们的帐户,他们需要按照链接,输入激活密钥,然后重新输入他们的电子邮件和密码。如果一切都匹配那么presto!新用户帐户已激活。
帐户激活后,让我们说用户忘记了密码。关于如何处理这种情况,我们有两个想法。
这需要在注册期间收集秘密问题和秘密答案数据。
我们担心的一个问题是(我们公司内部)多名员工会使用一个登录帐户。我们中的一些人认为将秘密问题方法作为一种选择。
但是,通过电子邮件发送的密码(临时或非临时)将容易受到影响,因为电子邮件不安全。
考虑到内部操作限制(多人登录)这些想法中哪些是最安全和用户友好的选择?或者,既不充足?
堆栈溢出是否可以通过评估答案来帮助我?下面表达的意见很少,但是没有任何关于答案质量的指示。
答案 0 :(得分:1)
在我的系统中,当有人请求丢失密码时我:
如果所有这些条件都成立,我会让他们创建一个新密码。
一般来说,虽然电子邮件并不十分安全,但如果某人的电子邮件帐户遭到入侵,您已经有了一个巨大的安全漏洞,但通过告诉他们他们只有30分钟重新激活他们的帐户,它会减少窗口当有人可能滥用这些信息时:它只能被使用一次,它会被用于一个已知的好的电子邮件地址,并且它只能使用30分钟...对于我所做的系统类型,这是足够安全的而没有负担用户(或管理员)太多了。
答案 1 :(得分:0)
我使用了发送到电子邮件的临时密码,虽然它不是最安全的。您还可以为临时密码添加时间限制,这将略微提高安全性。我认为多个安全问题,然后向电子邮件发送临时密码将是相当安全的。
答案 2 :(得分:0)
作为一个用户,我不喜欢安全问题,因为为了使它们真正安全,我必须非常难以记住答案。
这是我将使用的模式:
要记住的重要一点是,UID和代码之间的映射不应该是可预测的。
答案 3 :(得分:0)
公司内部网访问和登录过程的规则可能与从公共互联网访问的网站或帐户的规则不同。您可以拥有电子邮件地址以及用户员工/员工编号和安全通行证或卡序列号的一部分,或者使用IT支持为每个新用户发布的唯一且保密的登录ID。