我想将用户帐户锁定在Web应用程序中一段时间,这取决于登录尝试失败次数的函数。
我有两个看似互斥的目标:
a)防止帐户枚举漏洞的发生:如果输入电子邮件的人在经过一定次数的尝试后可以锁定帐户并获得不同于常规登录错误的错误消息,则可以进行帐户枚举。
b)提供良好的用户体验。如果用户不知道发生了锁定,则他们可能会:a)不知道锁定时间而增加锁定时间,以及b)多次输入正确的密码并继续收到锁定消息,这与登录失败消息相同。
到目前为止,我最好的主意似乎是在发生锁定时向用户发送电子邮件。许多人在工作时间打开电子邮件程序,但不能保证。
有任何想法吗?
谢谢。
最佳答案
这个问题问得好。一种解决方法是:
如果是攻击者试图登录,则所有失败的密码都将生成通用消息,并且不会提示电子邮件是否有效。
如果是用户尝试登录,则所有失败的密码都是他们忘记密码的错误,它们可以采取适当的措施(即,忘记密码)。密码尝试成功将显示锁定的消息,并且他们将理解为什么无法登录。
“这不会破坏锁定帐户的目的,因为攻击者可以继续尝试直到获得锁定消息为止?”有点-我认为这是一个权衡。上面的方法没有给攻击者任何有效电子邮件的提示-他们必须全部或全部删除。如果他们确实设法猜出了电子邮件和密码,他们将被锁定相当长的时间,真实用户将收到一封电子邮件并可以相应地更改其密码。
如果您决定在输入成功密码时不显示锁定的消息,则冒着使用户沮丧的风险(但可能不成问题,因为如果您提供密码,他们很可能会进入“忘记密码”表格) 。无论哪种方式,当尝试输入过多密码时,我都绝对会向用户发送警告电子邮件。
关于security - 实现登录回退时避免帐户枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29185582/