0

过去几天我一直在思考如何保护 Bots 使用的 Web 表单。使用是善意的滥用,大约 8 小时内大约 800k 机器人的查询。

让我们快速概述一下情况,任何缺失的信息 - 请询问。

机器人:

  1. 该机器人具有不同的 IP。
  2. 该机器人将其用户代理更改为真正存在的用户代理。
  3. bot是否加载js并有cookie的未知点。

问题:

  1. 该表单无法使用隐藏的令牌字段,因为它可能是从外部资源提交的。不同网站等资源,不了解 CSRF 令牌,无法生成它们。使得无法使用 CSRF。
  2. 该网站必须在浏览器中缓存,并且缓存可能仅在异常情况下重置,例如可疑行为。
  3. 不能大量使用数据库(!)。

现在的样子:

  1. 具有过期哈希的 Cookie 计数器 + 附加字符只有系统知道它们何时插入。
  2. 如果浏览器无法处理 cookie,则使用数据库日志记录。这是浏览器缓存的一些困难,当用户没有到达服务器时 - 结果:验证没有运行,计数器没有增加。
  3. reCaptcha 为在 X 时间内超过尝试次数限制的用户申请。

提出的想法:

  1. 为 iframe 提供一些内容并过期 0。 iframe 制作简单的 cookie 逻辑。
  2. iframe : 如果 cookie 没有设置 - 设置它,如果 cookie 被设置,验证。如果用户没有超过限制 - 设置计数器 +1,如果超过 - 发送到特定页面,这将显示缓存重置的警告。

这里的困难是,如果 bot 不支持 cookie 和从缓存中提供的内容怎么办......由于用户没有到达服务器,数据库不会写任何东西。但是,如果用户更改关键字,它将重置缓存并且后面的逻辑将起作用。

第二个难点:如果bot不支持JS怎么办(切换关键字会被淘汰)。但是,从缓存提供内容时无法重定向。

第三个难点:如果机器人破译了 ReCAPTCHA 怎么办?:)

*问题:*

在这种情况下你在做什么?请描述您正在考虑的步骤。非常感谢您对事物的看法。每个想法都可能与其他想法一起完善,我们可以提出一个很好的保护方案!谢谢你们!

4

2 回答 2

0

所以我对抗用户缓存的想法是:

使用 iframe 1x1。

它的内容使用 Expires: 0 发送,即使从缓存加载页面,每次都会提供 iframe。

我刚刚想到的另一个想法是记录鼠标事件。onmousemove 和 onkeydown,这两个甚至可以捕获 F5 keydown。向服务器报告并设置标志。

最终结果 决定使用隐藏的CSS,设置用户正常加载内容的系统变量。但是,如果“用户”正常加载内容,exctra 保护是实现 javascript 的事件跟踪(onmousemove、onkeydown、onclick)并接收发送到服务器进行标记。该请求仅在事件第一次发生然后不跟踪时发送到服务器一次。

于 2012-12-25T13:38:13.287 回答
0

事实:如果您必须接受任何人随时随地提交的任何表单,您基本上对机器人没有任何追索权。因为这就是机器人所做的一切:它们随时随地向您的服务器提交数据。

CSRF 令牌的作用是要求用户在向服务器提交数据之前先从服务器获取一些东西。这使服务器可以区分随机提交和“真实”提交。它还可以限制它发出这些令牌的速度。这只是为了防止 JavaScript、基于浏览器的跨站点攻击,它对可以随时获取此类令牌的机器人没有太大作用。

如果您将令牌绑定到用户并要求表单提交来自经过身份验证的用户,它可以让您更好地处理限制提交。您可以控制用户提交数据的速率,还可以控制允许谁注册以及如何注册。因此,它可以让您了解允许谁提交数据以及提交数据的频率。

如果没有这一切,您将无法真正掌握有关提交的有效性或频率的任何事情。您提到了跟踪用户的鼠标移动......我不确定您想如何实现这一点,但如果机器人只需要提交一些“看起来像鼠标移动”的额外数据,那也很容易绕过。“鼠标移动”毕竟只是提交给服务器的数据,你不知道这些数据是不是由鼠标生成的。

In short: protecting a web form against bots is possible through various techniques, including hidden honeypot fields, authentication tokens and captchas. If you require to have an open-for-all API anybody can submit to though, all this is pretty pointless.

于 2012-12-25T16:41:06.287 回答