我们最近对我们管理的一个面向公众的网站进行了外部安全审查。他们指出,在“恢复密码页面”上,提供现有和不存在的用户名时响应时间不同。他们声称这可以使攻击者更容易测试现有用户名。消除此攻击向量的建议更改是始终为每次密码恢复尝试执行相同的逻辑。
在我们的例子中,密码恢复逻辑由(大致)以下步骤组成:
- 从数据库加载用户。
- 使用密码重置链接向用户发送电子邮件。
如果用户存在,则执行这两个步骤。如果用户不存在,则只执行第 1 步。
在数据库查找等方面,这很容易解决。但是当涉及到与外部系统的交互时,在这种情况下发送电子邮件,它就不那么简单了。
我认为引入随机延迟不会有太大帮助,因为响应时间分布可能仍然存在可检测的差异。
另一个想法是在某个地方设置一个电子邮件帐户,并为每个不存在的用户名发送一封电子邮件。
在这种情况下,最佳做法是什么?