这是防止暴力攻击的有效方法吗?

我需要您对这是否是防止用户登录的强力攻击的有效方式提出意见:

  • 如果用户错误地将密码输入到帐户5次,它们被锁定5分钟。
  • 一旦被锁定,就会向我的数据库添加一条记录,该记录包含user_id以及用户可以尝试重新登录该帐户的时间。
  • 5分钟后,当他们下次尝试登录时,它会检查数据库以查看锁定时间是否已到。 如果是,他们再次尝试5次,如果没有,则显示错误。
  • 这是防暴力证明吗?

    谢谢。


    有一个非常古老的,迄今为止最好的防止蛮力的方法。 它起源于多年前的unix,迄今仍然有效。 实现起来也很简单:在每次登录尝试时都加入睡眠(3)。 普通用户在登录操作时不需要等待额外的3秒,这与限制单个主机连接数量的适当防火墙相结合是最有效的蛮力杀手。


    我认为加倍延迟时间加上一个多字密码短语(认为"stack overflow answers" ,可能会添加一些简单但易于记忆,所以我们也能很好地抵御字典攻击)将几乎完全暴力破解对用户不显眼。 这是我的意思,让我们假设1秒的初始间隔:

  • 第一次失败:延迟1秒
  • 第二次失败:延迟2秒
  • 第三次失败:延迟4秒
  • 第四次失败:延迟8秒
  • 等等...
  • 在这一点上,大概每个合法用户都会发现他已经忘记了密码,并会寻找重置它的方法。

    长度


    你在正确的轨道上。 您应该为数据库中的用户增加一个计数器字段,用于每次连续的无效密码尝试。 如果您试图在会话或cookie中保留该值,恶意用户可能会继续销毁该值并在4次尝试后重试。

    我采用了类似的策略 - 经过5次错误的尝试,我们需要验证码。 经过10次错误尝试,我们会阻止帐户直到重置。 我们也有一个重置密码和解锁策略。

    有人提到睡眠(3)策略。 虽然不太快速返回用户认证响应是一个好主意,但它可能不是防篡改的。 攻击者可能产生一系列并发身份验证请求,而不是快速连续的请求。 至少,根据您的策略,您知道他们每天只能获得每位用户2400次的猜测。 考虑切断用户超过5分钟的时间,特别是一旦他们通过10或15次猜测。

    对于偏执狂来说,请记录每个错误尝试的附加数据,例如请求中的IP地址,用户代理字符串和其他http头。 您可以在发生真正的攻击时识别模式。

    考虑包括在用户被锁定时记录和提醒适当的人员。

    链接地址: http://www.djcxy.com/p/21697.html

    上一篇: Is this an effective way to prevent brute force attacks?

    下一篇: Spring Security: how to implement Brute Force Detection (BFD)?