防止对Web应用程序的字典式攻击

防止字典攻击的最佳方法是什么? 我想到了几个实现,但他们似乎都有一些缺陷:

  • X失败登录尝试后锁定用户。 问题:容易变成拒绝服务攻击,在很短的时间内锁定很多用户。
  • 每增加一次用户名失败登录尝试的响应时间。 问题:字典攻击可能使用相同的密码,但使用不同的用户名。
  • 从IP地址每次失败登录尝试的响应时间递增。 问题:通过欺骗IP地址很容易解决。
  • 会话内每次失败登录尝试的响应时间将逐渐增加。 问题:通过创建字典攻击轻松解决问题,每次尝试都会触发新的会话。

  • 我非常喜欢gmail的反暴力系统。 它基于用户可以积累的“热量”,在用户过热之后,他们被提示使用验证码。 您可以使用sql数据库或使用redis incr来跟踪热量。 热被分配给一个IP地址。 由于三方握手而在互联网上“欺骗”一个tcp连接是完全不可能的 ,然而代理服务器很丰富而且ip地址非常便宜。 代理服务器通常用于发送垃圾邮件,您可以检查黑名单并自动提示用户输入验证码。

    针对您的系统的每个不良行为都会更新散热表。 例如,失败的登录会累积35%的热量。 一旦热量水平大于或等于100%,则用户被迫解出验证码。 解决验证码将“冷却”该IP地址。 热表可能包含一个时间戳列,该列在更新时设置为当前时间。 24小时后,热量可以回到0。

    reCaptcha是您可以使用的最安全的验证码。


    我一直是你的选择3的粉丝 - 根据IP地址锁定或限制客户端。 其他选项比你说的原因更值得花费。

    欺骗IP地址是可能的,但它并没有打败这种反措施。 如果你的意思是技术意义上的“欺骗” - 伪造TCP数据包头 - 那么攻击者就不会那么好,因为即使他们猜测了正确的密码,他们也不会收到告诉他们的响应。 当然,他们仍然可以使用代理服务器,但代理服务器的数量有限。 即使攻击者有1,000个可用的代理服务器,并且每个IP地址允许尝试10次尝试。 如果你完全执行任何密码复杂性(例如要求使用字母数字密码),那么这将不足以猜测。

    这应该足以阻止大多数脚本小子。 如果您面对的是更坚决的攻击者,您可能必须实施某种站点范围的监控,以检测是否有多次尝试(因此可能会发生攻击)并以某种方式“锁定”,例如。 通过使用CAPTCHA。 我不是一直都在使用CAPTCHA的粉丝 - 他们只是比他们值得的更烦恼。

    最终,用户可以选择一个安全的密码(尽管你可以帮助他们)。 如果他们选择了“Password1”作为他们的密码,那么您可以做的任何事情都不会阻止黑客进入他们的账户。


    也许你需要在你的web表单上实现CAPTCHA。

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

    上一篇: Preventing dictionary attacks on a web application

    下一篇: Throttling login attempts