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

时间:2010-11-27 10:17:35

标签: ajax security brute-force login-attempts

假设我有文件login.php

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

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

我使用jquery进行ajax调用。

3 个答案:

答案 0 :(得分:1)

  

我正在考虑让它拒绝访问,除非它来自我自己的网站的形式......但你会怎么做呢

不可能实现这一目标。您可以使用某种captcha,限制请求,配置防火墙以从同一IP中删除多个连续请求,这将使攻击者的工作更加困难。

答案 1 :(得分:1)

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

不要使用会话或任何客户端机制。只需使用临时表来存储IP和编号或失败的身份验证的登录请求,您可以使用它来增加时间。 15分钟没有从ip尝试auth,刷新它的条目。

有了这个,对于坏人来说,残酷的力量可能是“小”的棘手,也许是有几年的时间来尝试访问你的网站),它保留了像我这样需要重新输入密码的阅读障碍的可用性好的一个4或5次没有错误^^

答案 2 :(得分:0)

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

  1. 限制每五分钟用户名的登录尝试次数。这需要您的数据库中的表,您可以在那里或多或少地保留最近5分钟的请求和时间。 这有一个令人遗憾的副作用,即允许某人(D)DoS你的一个用户。
  2. 限制全局登录尝试次数...这样更容易,但可以使整个服务器的DDoS变得容易。我不会这样做。
  3. 限制来自IP或IP /用户的尝试次数。这不会允许简单的DDoS,但它不会阻止分布式暴力攻击,所以不要打扰。
  4. 我会执行以下操作:要求密码为10个字符或更多。如果它们不够强大,或者基于字典单词(但仍允许它们),则尖叫。登录请求过多时进行记录,并尽快亲自调查。

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