如何阻止坏的机器人访问我的网站而不会影响真实用户?

4
我希望能够阻止那些无用的网络爬虫(也就是那些忽略 robots.txt 文件的坏机器人),它们会窃取网站内容并消耗带宽。同时,我不想干扰合法用户的使用体验,或者阻止良好行为的机器人(例如 Googlebot)对网站进行索引。
已经有一种处理这个问题的标准方法,在这里已经描述过:Tactics for dealing with misbehaving robots。然而,在那篇文章中被提出和赞同的解决方案并不符合我的要求。
一些坏的机器人通过 tor 或者 botnets 连接,这意味着它们的 IP 地址是短暂的,并且可能属于一个使用受损计算机的人。
因此,我一直在思考如何改进行业标准方法,让被列入黑名单的“误报”(即人类)重新访问我的网站。一个想法是停止直接阻止这些IP,并要求它们在获准访问之前通过CAPTCHA。虽然我认为对于合法用户而言,CAPTCHA是一个讨厌的问题,但用CAPTCHA审核疑似的恶意机器人似乎比完全封锁这些IP更好。通过跟踪完成CAPTCHA的用户的会话,我应该能够确定他们是否是人类(应将其IP从黑名单中删除),还是足够聪明以解决CAPTCHA的机器人,将它们放在更黑的名单上。
但在我实施这个想法之前,我想问问这里的好人是否预见到任何问题或弱点(我已经意识到一些CAPTCHA已经被破解了 - 但我认为我应该能够处理)。

Stack Overflow采用了Captcha方法。你有注意到吗?没有?那对于普通用户来说就不是一个烦人的问题了。 - John Dvorak
1
那个帖子中排名第二的答案也是个绝妙的主意。 ProjectHoneyPot 是商业服务(http://www.cloudflare.com/)的基础,通过 DNS 解决了这个问题。 RBL 和像 ProjH.. 这样的黑名单可以产生很大的作用。机器人编写者非常复杂,可以隐藏它们的踪迹,频繁地限制和更改 IP。你永远无法完全阻止它们,每天都会出现新的。 - gview
如果您的计算机感染了病毒,用户如何填写验证码才能保证它不再受到感染? - Pekka
@Pekka,答案显然是:不会。但是,我认为机器人使用该计算机作为其基础将无法填写CAPTCHA。 - Free Radical
@Gisle 我的想法是 - 如果一个机器人与一个无辜的人同时使用一台机器,你怎么能区分合法使用和恶意使用?而且,解除IP地址的黑名单会不会为机器人继续造成麻烦打开大门,最终导致再次被列入黑名单等等?虽然我可能看问题有误,但这只是理论。 - Pekka
显示剩余4条评论
1个回答

1
我认为问题在于captcha是否存在可预见问题。在深入讨论之前,我还想谈一下如何计划使用captcha来挑战机器人。TOR和代理节点经常更换,因此IP列表需要不断更新。您可以使用Maxmind作为良好的代理地址列表作为基线。您还可以找到更新所有TOR节点地址的服务。但并非所有恶意机器人都来自这两个向量,因此您需要找到其他捕捉机器人的方法。如果添加速率限制和垃圾邮件列表,则应超过50%的恶意机器人。其他策略确实必须围绕您的网站定制建造。
现在让我们谈谈验证码的问题。首先,有像http://deathbycaptcha.com/这样的服务。我不知道是否需要详细说明,但它使您的方法无用。许多人绕过验证码的其他方法是使用OCR软件。验证码越好打败OCR,对用户的影响就越大。此外,许多验证码系统使用客户端cookie,某人可以解决一次,然后将其上传到所有机器人中。 我认为最著名的是Karl Groves的28种击败验证码的方法列表。 http://www.karlgroves.com/2013/02/09/list-of-resources-breaking-captcha/ 完全公开,我是Distil Networks的联合创始人,这是一个阻止机器人的SaaS解决方案。我经常推销我们的软件,作为比仅使用验证码和自己构建更复杂的系统,因此我对您的解决方案的有效性持有偏见。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接