Security 使用webapplications抵御密码列表攻击的最佳做法

Security 使用webapplications抵御密码列表攻击的最佳做法,security,web-applications,passwords,brute-force,Security,Web Applications,Passwords,Brute Force,我想防止机器人入侵密码保护较弱的帐户。(例如,易趣和其他大型网站发生了这种情况) 因此,我将使用ip、尝试次数和上次尝试的时间戳(memcache fall out)设置一个(mem-)缓存值 但是,如果机器人试图用一个密码打开任何帐户呢。例如,bot尝试使用密码“password123”的所有500000个用户帐户。也许10号门开着 因此,我的尝试只是缓存ip,并将最大尝试次数设置为~50次。成功登录后,我会将其删除。因此,好的机器人只需使用有效帐户登录,每49次尝试重置锁定 有没有办法把它做

我想防止机器人入侵密码保护较弱的帐户。(例如,易趣和其他大型网站发生了这种情况)

因此,我将使用ip、尝试次数和上次尝试的时间戳(memcache fall out)设置一个(mem-)缓存值

但是,如果机器人试图用一个密码打开任何帐户呢。例如,bot尝试使用密码“password123”的所有500000个用户帐户。也许10号门开着

因此,我的尝试只是缓存ip,并将最大尝试次数设置为~50次。成功登录后,我会将其删除。因此,好的机器人只需使用有效帐户登录,每49次尝试重置锁定

有没有办法把它做好? 大型平台对此做了什么? 我能做些什么来防止白痴通过重试50次来阻止代理上的所有用户


如果没有最佳实践——这是否意味着任何平台都是可强制执行的?至少有一点关于何时重置计数器的提示?

几天前有一篇相对不错的文章。

一些网站在开始让您输入验证码和用户名/密码之前,可能会让您尝试两三次。一旦您成功登录,验证码就会消失。

我认为您可以将您的解决方案与验证码混合使用:

  • 计算每个IP的尝试次数
  • 如果在给定的时间内从给定的IP地址尝试的次数过多,请在登录表单中添加一个

  • 虽然代码主要关注Django,但对最佳实践方法进行了一些非常好的讨论。他使用memcached来跟踪IP和登录失败。

    当用户设置密码时,您可以使用一个命令来确保他们没有使用简单的强制密码


    编辑:为了清楚起见,这不应被视为您试图解决的问题的完整解决方案,但应与其他一些答案结合考虑。

    您永远无法阻止一组机器人从许多不同的IP地址尝试此操作


    从相同的IP地址:我想说,如果你看到一个“可疑”行为的例子(无效的用户名,或几个有效的帐户有错误的登录尝试),只需阻止登录几秒钟。如果是合法用户,他们不会介意等待几秒钟。如果它是一个机器人,这将减慢他们到不切实际的地步。如果您继续从IP地址看到这种行为,只需阻止它们——但为合法用户留一扇带外的门(拨打电话#x或通过电子邮件发送此地址)。

    请注意:IP地址可以在数千甚至数百万用户之间共享!!!例如,由于AOL的网络架构,大多数/所有AOL用户都显示为一组非常小的IP地址。大多数ISP将其庞大的用户群映射到一小部分公共IP地址

    您不能假设IP地址只属于一个用户。


    您不能假设单个用户将只使用单个IP地址。

    检查以下问题,讨论针对分布式暴力和字典攻击的最佳做法:


    在此处编辑您的帖子几次,以查看此行为;-)哦,太好了,我没意识到他们这么做了。他们甚至使用了reCAPTCHA!尽管我很喜欢KittenAuth,但我不得不承认,有助于书籍数字化的验证码(captcha)更好。永远不要说永远。我相信我已经想出了一个可以挫败分布式暴力攻击的方案-参见