如何防止登录系统的用户枚举攻击?

时间:2016-03-06 13:01:42

标签: security login

对于许多网站,可以使用计时攻击来枚举用户。换句话说,当我尝试使用有效的用户名登录时,我的响应时间与尝试使用无效的用户名登录的时间不同(假设密码总是错误的)。因此,无论用户名是有效还是无效,一种解决方案是登录操作以随机或恒定时间返回。你如何解决这个问题?什么是最佳实践?

3 个答案:

答案 0 :(得分:0)

代码会因网站的语言而异。 PHP中的一个例子是

xargs -n 1 -I % sh -c 'echo %; dig +short A %;' < domainlist.txt

当然,您需要确定系统性能的基线,以确定最佳等待时间。

答案 1 :(得分:0)

另一种解决方案是添加验证码验证,这将增加额外的随机等待时间以及额外的安全级别

答案 2 :(得分:0)

可能的解决方案: 假设成功登录与失败登录之间的时间差为0.5秒

  1. 为所有请求添加额外的随机延迟,范围从0.3到0.7。这样一来,就不可能清楚地检测出什么是失败登录还是成功登录。当然不是100%的子弹证明。
  2. 仅在故障端添加随机延迟,这里的风险是,如果由于某种原因,差异随时间变化(例如,成功添加了新的分析方法,那么现在差异就很容易被检测到)很容易在以后使用相同的攻击。<​​/ li>
  3. 在失败的流上添加随机密码哈希+比较操作。这应该使成功/失败的响应时间大致相似。
  4. 深入研究差异化可能是使成功流程更快地降低风险。