在我运行的网站上,我已经实施了这个帐户恢复程序(忘记密码程序)。我想知道它是否有任何我没有发现的问题,这使它不安全。
当用户创建帐户时,他们需要输入密码(当然)和电子邮件地址。他们还需要从大约 20 个问题的列表中选择一个“秘密问题”,然后输入该问题的“秘密答案”。密码和秘密问题答案都经过哈希处理,每个都带有不同的随机盐。假设使用的散列函数是足够的。(用户可以随时更改他们的电子邮件、密码和/或秘密问题/答案,必须输入密码才能这样做。我不强加任何密码强度要求,除了最小长度要求。)
如果用户需要恢复帐户,他们会进入帐户恢复页面并输入他们的用户名。一封电子邮件将发送到与其帐户关联的电子邮件地址。此电子邮件包含一个链接,其中包含随机生成的代码(site.com/accountrecovery?user=1234&code=bryvthery6y65htee 等)。当用户单击该链接时,他们将被带回该站点,并假设代码检查出来,他们将被带到一个页面,在那里他们被问及他们的秘密问题并且必须回答它,同时输入一个新密码。
每当存储的密码或秘密答案被更改时,无论采用何种方法,都会为其生成一个新的随机盐。
这个设置有什么问题吗?我想要建设性的批评。其背后的想法是,为了能够重置密码,用户必须能够访问注册的电子邮件地址并且必须知道秘密答案。