我的意见:假设您要求用户的电子邮件地址在所有注册用户中是唯一的,那么密码恢复页面会询问用户的电子邮件地址。您可以将其设为“用户名或电子邮件地址”,但我认为这个小小的调整不会帮助足够多的用户证明您的额外后端处理是合理的。
为了增加安全性,请勿确认或否认在您的数据库中找到了用户名或电子邮件地址。
带有重置密码链接的电子邮件应该可以正常工作。使用哈希(越长越好;绝对是 20 个字符或更多),这样黑客就无法轻易猜出重置链接。为了增加安全性,请指定一个时间限制,之后重置链接将不再起作用。
一旦用户点击链接并选择了新密码,不要自动将他们登录到他们的帐户;让他们从头开始登录。这将确保他们知道他们的新密码,并减少密码恢复代码中出现错误的机会,让黑客直接登录帐户。
提醒用户检查他们的垃圾邮件文件夹,并提供一个时间窗口,让他们可以合理地假设他们应该收到重置链接(这样他们就知道要等多长时间才能向您投诉)。
安全问题通常是个坏主意。首先,用户很难记住他们的答案是什么。这就像在用户的密码中添加一些内容,但向世界提示该额外部分可能是什么。并且答案往往不区分大小写,并且只有字母或字母数字。
如果密码恢复系统不适合他们,请确保您提供一种让用户与您联系的方式。不过要小心,因为这可能是社会工程黑客的途径。
密码限制可能会让用户感到沮丧。仔细考虑实施这一点,允许多少次尝试,以及超出该限制的后果。大多数人都有一个密码的变体。现在,从安全的角度来看,这并不聪明,但它确实发生了。一个行为合理的用户很可能会在一分钟内尝试 hooper2012、Hooper2012、hooper20121、Hooper20121。
也许你可以,比如说,在五次尝试失败后让用户在以后的任何尝试之间等待 60 秒。在另外五次尝试失败后,将其加倍至 120 秒。每五次失败的尝试继续加倍等待时间。如果你让它一直持续到 50 次连续失败的尝试,那么用完这 50 次尝试所需的最短时间将是1 天 18 小时 35 分钟。我绝对建议您在代码中添加一些内容,以通知您一天内连续尝试失败超过 12 次的任何帐户。
在连续 50 次尝试失败后暂时停用该帐户,并要求用户联系您的技术支持。再次,警惕社会工程学。
用户提供正确的登录凭据后,将等待期重置为 0。