假设我有文件 login.php.

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

我的问题是,由于此方法容易受到蛮力攻击的影响,因此我应该如何保护此方法。我正在考虑使其拒绝访问,除非它是我自己网站的表格,但是您将如何做到这一点?

我使用jQuery拨打ajax呼叫。

有帮助吗?

解决方案

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

  1. 限制每五分钟每个用户名的登录尝试次数。这需要数据库中的表格,您将在最后5分钟(或多或少)保留请求及其时间。这具有不幸的副作用,允许某人(d)DOS您的用户之一。
  2. 限制全局登录尝试的数量...这很容易,但是可以使整个服务器的DDO变得容易。我不会做。
  3. 限制IP或IP/用户的尝试次数。这不允许轻松的DDOS,但不会停止分布式的蛮力攻击,因此请勿打扰。

我会做以下操作:需要10个或更多字符的密码。如果它们不够强大,或者是基于字典单词(但仍然允许它们)。在登录请求太多时登录并尽快亲自调查。

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

其他提示

我正在考虑使其拒绝访问,除非它是我网站的表格...但是您将如何做到这一点

不可能可靠地实现这一目标。您可以使用某种 验证码, ,油门请求,配置防火墙以从同一IP中删除多个连续的请求,这将使攻击者的作业变得更加困难。

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

不要使用会话或任何客户侧机制。只需使用一个临时表作为登录请求谁存储IP和数字或失败的auth,您就会使用时间来增加时间。 15分钟后,没有IP的ATUR尝试,冲洗其输入。

这样,对于坏人来说,Brut Force可能是一个“小”的棘手时间在没有错误^^的好 ^

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top