如何防止对Ajax表单提交的暴力攻击?

假设我有文件login.php

login.php获取(或发布)参数username和password,如果登录成功则返回true,否则返回false。 这样其他页面可以通过ajax访问它。

我的问题是,由于这种方法容易受到暴力攻击,我应该如何确保这一点。 我想让它拒绝访问,除非它是从我自己的网站的形式,但你会怎么做呢?

我使用jQuery来进行Ajax调用。


蛮力比你想象的难得多。 如果一个人使用错误的密码,这是他们的问题。 即使是弱密码(8个字符),如果攻击者每秒可以进行数百万次尝试,则需要2年的暴力破解。 你有很多选择:

  • 限制每五分钟每个用户名的登录尝试次数。 这需要您的数据库中有一张表,您可以在其中保留最近5分钟的请求和时间,或多或少。 这有一个不幸的副作用,允许某人(D)拒绝你的一个用户。
  • 限制全局登录尝试的次数......这很容易,但可以使整个服务器的DDoS变得更简单。 我不会这样做。
  • 限制来自IP或来自IP /用户的尝试次数。 这不会让一个简单的DDoS,但它不会停止分布式暴力攻击,所以不要打扰。
  • 我会做以下事情:要求10个字符或更多的密码。 如果他们不够强大,或者是基于字典单词(但仍然允许他们),就会尖叫。 记录过多登录请求并尽快进行个人调查。

    所有这些都发生在服务器端,并且与AJAX无关。


    我想让它拒绝访问,除非它是从我自己的网站的形式...但你会怎么做呢

    要做到这一点是不可能的。 您可以使用某种验证码,限制请求,配置您的防火墙以从相同的IP丢弃多个连续的请求,这将使攻击者的工作更难一些。


    在来自同一个IP的3个请求之后,只需将您服务器的每个响应延迟2秒。

    不要使用会话或任何客户端机制。 只需使用存储IP和号码或失败的身份验证的登录请求的临时表,即用于增加时间。 15分钟后,如果没有通过IP进行身份验证尝试,请清空其条目。

    因此,对于这个坏人来说,强力可能是一个“小小”的棘手问题,也许有几年尝试访问您的网站),它保留了像我这样的阅读障碍的可用性,他们可能需要重新输入他的密码4或5时间在没有错误的前提下,好的^^

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

    上一篇: How to prevent brute force attacks on ajax form submission?

    下一篇: Brute force attack failsafe login in asp.net