如果您可以设置一个简单的“在这张图片中输入数字”验证码并使用该棒 24 小时,您就知道您的敌人是业余爱好者。你知道这种涉及定制代码的原始设备会让它们慢 24 小时。这可能很有趣:)
我会广泛使用样式表来隐藏页面代码中的信息:在两种意义上,首先隐藏验证码,其次隐藏信息性答案。目的是虐待性地误导刮板。
我会在服务器端编写一些代码来创建乍看之下可信的虚假答案,但以不易确认的方式是虚假的。此外,使用随机播种或 MD5 来确保相同的输入总是给出相同的虚假答案。
对验证码的误导:
例如,保留您使用的最后一个验证码系统,但使用样式表将其隐藏。跟随一个不同的验证码,被 Javascript 混淆;甚至可能是另一个具有不同密钥的 reCaptcha。
现在,爬虫不会意识到第一个验证码被样式表抑制了。它会愉快地解决验证码并用错误的键返回答案。 明白了。然而,就像破解 Enigma 一样,你不能明显表明你已经破解了代码。刮板必须继续相信它在工作。
误导回答:
像往常一样给出一个答案,并在其周围放置一个样式表。样式表将这个结果隐藏给普通人;刮刀没有注意到这张纸具有“隐藏”属性。 你在这里给出的答案是假的。事后呈现真实结果。对于奖励积分,将结果显示在图形中,使其无法刮擦。当然,尽量掩饰这一点。
如果您有遥测(解决了错误的验证码)这是一个抓取的查询,那么甚至不要费心从您的服务提供商那里购买该查询结果。在服务提供商花费的典型时间范围内插入 sleep(t+random),然后发回虚假答案。
看起来很正常
攻击者会认为一切正常,只检查查询是否成功,而不检查结果质量。幸运的是,您的攻击者在每次查询时都不会登录,而只是将答案转储到数据库中。攻击者可能需要很长时间才能意识到您已经毒化了数据,到那时,整个数据库将被破坏,不知道哪些条目是有效的,哪些是有毒的(请参阅使假数据看起来合法的重要性?) 即使攻击者对每个条目都加了时间戳,这也是一次多么大的漏洞搜寻啊!必须每天手动检查多个条目才能确定数据何时变坏。
还有一件事情。缓存真实答案,如果僵尸网络查询在缓存中,请始终从缓存中给出正确答案。因此,scraper(故障排除)将使用浏览器访问您的真实网站,并要求测试编号为 213-456-7890。隐藏会起作用,它的行为就像一个真实的查询,所以你将计算真实的答案并返回它。 接下来,爬虫会告诉僵尸网络请求 213-456-7890。看看机器人是否得到不同的结果。您将检测到机器人查询。如果你现在给出一个虚假的答案,scraper 就会知道 jig 已经启动了,并且会迭代破坏你的检测。因此,既然您在缓存中有真正的答案,即使在隐藏的字段中,也要给出它。现在,爬虫很困惑:僵尸网络似乎工作了。
为什么以及如何
显然,有人发现您的数据很有价值。他们会从你的源头得到它,但他们不想为此付费,所以他们在刮你。
- 有可能他们实际上是一个竞争对手的网站,它与您做同样的事情,当他们从访问者那里得到一个查询时,他们会向您生成一个查询。从本质上讲,这是一种使用您的服务但发布他们的广告的计划。你自己知道它的价值。您可以通过在每个竞争对手网站上进行模糊和不同的查询来测试它,并查看哪些查询会在您的日志中弹出。
有无数种方法可以解决 CAPTCHA。在竞争对手网站为他们的客户提取您的数据的示例中,他们可能只是将您的验证码传递给他们的客户。还有一些方法可以诱骗人类为你做 CAPTCHA,例如“解决 CAPTCHA 获得免费色情片”,或者提供因某种原因需要 CAPTCHA 的无关服务,例如匿名公告板。每次有人发帖时,它都会向您发送一个查询并获取其海报来解决您的验证码。验证码也解决了第三世界的奴隶制问题。