假设您为您的 web 应用程序创建了一个密码重置系统。系统需要用户名或电子邮件才能将重置链接发送到帐户的电子邮件。
考虑这些相互矛盾的要求:
- Cracker A 输入系统的表单潜在用户名(或电子邮件),以尝试发现系统中当前的匹配项。
理想情况下,系统既不确认也不否认现有用户名和电子邮件的存在,对任何一种情况都提供完全相同的反馈,以防止泄露匹配项。
- 用户 B 尝试重置他们的密码,但拼写错误,或者更糟的是,错误记住了他们的用户名,以至于它与文件中的任何帐户都不匹配。因此,他们的重置请求将永远不会得到满足。
理想情况下,他们的错误会在他们请求重置后几秒钟内向他们清楚地表明,并带有友好的消息,例如“对不起,我们没有这样的用户名(或电子邮件)存档。您可以尝试检查您的拼写,或继续并创建一个新帐户。” 否则,他们可能会检查他们的电子邮件,一无所获,等待,一无所获,再次重置,一无所获,(因为没有可发送的匹配项)也许将他们的业务转移到其他地方?如果你幸运的话,打电话给客户服务?
有什么方法可以解决这些相互冲突的目标?
编辑:
考虑清楚问题后,我正在考虑解决问题的一种方法可能是仅使用电子邮件地址,如果系统中不存在该电子邮件,则发送“该帐户不存在,这是一个链接创建一个新帐户”到电子邮件而不是重置链接。
这样一来,用户总是会得到通知,而破解者只能将电子邮件发送到他们已经有权访问的帐户,这对他们没有用处。
说得通?这种方法有问题吗?