我希望在我的网站应用程序中实现密码恢复功能。
我不想使用密保问题。
虽然可以通过电子邮件发送密码,但我认为这样做存在风险。
也许我可以生成一个新的临时随机密码,并通过电子邮件发送它,但我认为这和上述方法一样有风险。
我是否可以通过电子邮件发送一个URL,例如http://example.com/token=xxxx, 其中xxxx是与用户关联的随机令牌。因此,当用户导航到该URL时,他/她可以重置密码。
我希望在我的网站应用程序中实现密码恢复功能。
我不想使用密保问题。
虽然可以通过电子邮件发送密码,但我认为这样做存在风险。
也许我可以生成一个新的临时随机密码,并通过电子邮件发送它,但我认为这和上述方法一样有风险。
我是否可以通过电子邮件发送一个URL,例如http://example.com/token=xxxx, 其中xxxx是与用户关联的随机令牌。因此,当用户导航到该URL时,他/她可以重置密码。
当我在空军服役时,我们的安全规则是:设置或重置密码时,请勿在同一封电子邮件中发送用户名和密码。这样,如果有人拦截电子邮件搜寻密码,他必须成功地拦截两封电子邮件,并能够将它们连接起来才能突破安全。
我看到很多网站使用“转到此URL以重置密码”的方式。也许我错过了什么——我不是安全专家——但我不认为这比发明新的临时密码并发送更安全。如果黑客拦截了电子邮件,为什么他不能单击该链接并像合法用户一样查看新密码?在我看来,这只会给用户带来额外的麻烦,而没有任何安全收益。
顺便说一句,恭喜你没有使用安全问题。我不理解这个设备的逻辑。自计算机安全诞生以来,我们一直告诉人们,“不要使用关于自己信息的密码,黑客可以发现或猜测,例如你的高中名称或你最喜欢的颜色。黑客可能能够查找你的高中名称,即使他们不认识你或对你一无所知,如果你住在你上学的附近,他们也可以通过尝试附近的学校来猜到。只有少数几种可能的喜欢的颜色,所以黑客可以猜到。等等。相反,密码应该是毫无意义的字母、数字和标点符号的组合。”但现在我们还告诉他们,“但是!如果你很难记住那个无意义的字母、数字和标点符号的组合,没问题!取一些你容易记住的关于自己的信息——比如你的高中名称或你最喜欢的颜色——你可以将其用作“安全问题”的答案,即替代密码。”
的确,安全问题比仅仅选择了一个糟糕的密码更容易让黑客攻击。如果您只是使用个人信息作为密码,黑客可能不知道您使用了哪个个人信息。您是否使用了您的宠物名字?您的出生日期?您最喜欢的冰淇淋口味?他们必须尝试所有这些信息。但是安全问题会告诉黑客您使用了哪个个人信息作为密码!
与其使用安全问题,为什么不直接告诉用户:“如果您忘记了密码,请在屏幕底部找到它,如果您试图入侵他人的帐户,绝对禁止向下滚动。” 它只会稍微不那么安全一点。
如果网站要求我提供我出生城市或第一辆汽车的制造商,我不会给出实际答案。我会提供一个毫无意义的密码。
</抱怨>
首先,不要存储用户密码的明文副本,甚至是加密版本。你只需要保留用户密码的哈希(hashed)副本。
关于找回密码的解决方案,根据我的经验,发送包含更改用户密码链接的恢复邮件是最好的解决方案。这可能对用户来说更加方便,从安全角度来看,与发送新的随机密码以在下次登录时更改密码基本相同。我仍然建议恢复链接在合理的短时间内过期,并且仅能使用一次。
http://site.com/reset-pass?e='+user.email+'&p='+user.pass
,其中密码字段是哈希值,这是否安全?如果有人获取了您数据库中的哈希值,这是否意味着他们可以重置每个人的密码?您如何实现链接的过期? - Cory Gross很难说你应该做什么,因为几乎任何解决这个问题的方法都会削弱安全性。除非你想调查发送短信、回调验证、一次性密码生成器或其他将密码恢复到不同媒介的方案。
然而,你不应该做以下几件事情:
发送密码-毕竟,正如已经提到的那样,你没有它。
生成新的临时密码-这不仅与发送密码一样不安全,还会导致拒绝服务攻击的可能性。我可以进入网站,假装是你,请求一个新的密码,然后(如果你没有检查电子邮件)你无法登录,不知道原因,必须请求一个新的新密码......
令牌可能是最好的选择。收到通知表示忘记了密码请求,但在你确认之前不执行任何操作。你还可以将其设置为有相对较短的过期时间的一次性令牌,以限制风险。
当然,很多取决于应用程序。显然,保护财务和其他敏感信息比防止在mytwitteringfacetube.com上被黑客攻击更为重要,因为虽然这很麻烦,但如果有人想在社交网络网站上窃取某人的身份,他们可以直接开设自己的帐户并冒充窃取的信息。
显然,你不能通过电子邮件发送原始密码,因为你并未存储它(是吧?!)。从安全角度来看,发送临时密码(必须更改,因为它仅适用于一次登录)和重置密码链接是等效的。
@Jay。安全问题的正确使用是用于启动密码重置电子邮件,而不是实际重置密码。如果没有像安全问题这样的机制,那么就可以启动密码重置。尽管看起来不太重要,但重置电子邮件可能会发送到一个可能不再属于原始所有者的电子邮件地址。这并不罕见。例如,当员工离开公司时,通常这些邮件会转发给另一名员工。安全问题为该场景添加了低级别的混淆。它还减少了一个人在错误的帐户上不断启动密码重置引起一些可怜的家伙意外收到垃圾邮件的问题。安全问题确实不是真正安全的,它们只是旨在减少这些情况。任何使用安全问题来实际重置密码的人都是错误的。