2

假设我有文件login.php.

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

我的问题是,由于这种方法容易受到暴力攻击,我应该如何保护它。我正在考虑让它拒绝访问,除非它来自我自己网站的表单,但你会怎么做呢?

我使用 jquery 进行 ajax 调用。

4

3 回答 3

1

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

不可能可靠地实现这一点。您可以使用某种验证码、限制请求、配置防火墙以丢弃来自同一 IP 的多个连续请求,这将使攻击者的工作更加困难。

于 2010-11-27T10:19:53.153 回答
1

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

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

有了这个,蛮力对于坏人来说可能是一个“小”棘手可能有几年的时间尝试访问您的网站),它保留了像我这样可能需要重新输入他的密码 4 或 5 的诵读困难的可用性时间前的好人没有错误^^

于 2010-11-27T10:33:57.370 回答
0

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

  1. 限制每个用户名每五分钟的登录尝试次数。这需要您的数据库中有一个表,您可以在其中保存请求及其过去 5 分钟或多或少的时间。这有一个令人遗憾的副作用,即允许某人 (D)DoS 您的用户之一。
  2. 限制全局登录尝试的次数...这更容易,但可以使整个服务器的 DDoS 变得容易。我不会这样做的。
  3. 限制来自 IP 或来自 IP/用户的尝试次数。这不会允许简单的 DDoS,但它不会阻止分布式暴力攻击,所以不要打扰。

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

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

于 2010-11-27T10:29:58.707 回答