防止网站上的蛮力登录

作为对最近的Twitter劫持和杰夫的词典攻击文章的回应,什么是保护您的网站免受暴力登录攻击的最佳方式?

杰夫的帖子建议每次尝试登录的时间都会延长,并且评论中的建议是在第二次失败尝试后添加验证码。

这两个看起来都是好主意,但你怎么知道它是什么“尝试数字”呢? 您不能依赖会话ID(因为攻击者每次都可以更改它)或IP地址(更好,但易受僵尸网络攻击)。 简单地使用用户名记录它可以使用延迟方法锁定一个合法用户(或者至少使他们的登录过程非常缓慢)。

思考? 建议?


我认为数据库坚持给定账户的短暂锁定期(1-5分钟)是解决这个问题的唯一方法。 数据库中的每个userid包含timeOfLastFailedLoginnumberOfFailedAttempts 。 当numbeOfFailedAttempts > X您锁定几分钟。

这意味着你正在锁定有问题的userid一段时间,但不是永久性的。 这也意味着你正在为每次登录尝试更新数据库(当然,除非它被锁定),这可能会导致其他问题。

亚洲至少有一个全国NAT,因此IP不能用于任何事情。


在我看来,有几种可能性,每种都有利弊:

强制使用安全密码

  • Pro :将防止字典攻击
  • Con :也会阻止流行,因为大多数用户不能记住复杂的密码,即使你向他们解释,如何轻松记住它们。 例如,通过记住句子:“我在Mall购买了5美分的苹果”导致“Ib1Af5CitM”。
  • 多次尝试后锁定

  • Pro :会减慢自动测试
  • Con :为第三方锁定用户很容易
  • Con :在数据库中使它们持久化可能会导致在诸如Twitter或可比较的大型服务中进行大量的写入过程。
  • 验证码

  • Pro :他们阻止自动测试
  • Con :他们在计算时间
  • Con :会“放慢”用户体验
  • 巨大的CON :他们不是无障碍的
  • 简单的知识检查

  • Pro :将阻止自动测试
  • 骗子 :“简单”是在旁观者的眼中。
  • Con :会“放慢”用户体验
  • 不同的登录名和用户名

  • Pro :这是一种技术,几乎看不到,但在我看来,防止暴力攻击是一个很好的开始。
  • Con :取决于用户对这两个名字的选择。
  • 使用整个句子作为密码

  • Pro :增加可搜索空间的大小。
  • Pro :大多数用户更容易记住。
  • Con :取决于用户的选择。
  • 正如你所看到的,“好”的解决方案都取决于用户的选择,这再次揭示了用户是链中最弱的元素。

    还有其他建议吗?


    你可以做Google做的事情。 这是在一定数量的trys后,他们有一个captacha出现。 经过几次与captacha,你锁定他们几分钟。

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

    上一篇: Preventing Brute Force Logins on Websites

    下一篇: What's the best method for sanitizing user input with PHP?