AI 大模型公司,正在疯狂收集训练数据。
它们派出无数爬虫,在互联网上无节制地抓取数据。
爬虫数量之多、频率之高,堪比 DDoS 攻击。
帅云网络
上周,代码托管网站 SourceHut 的站长,公开发表文章(下图),痛斥 AI 爬虫太过份,服务器无法承受访问压力,中断服务。
帅云网络
他非常生气,这些爬虫根本不遵守 robots.txt 文件,Git 仓库的每个页面、每个链接、每个提交都要爬取。

它们来自全球数万个 IP 地址,用户代理(user-agent 字段)也是随机的,伪装得像真实用户,难以有效拦截。

最可气的是,它们今天爬完了,过了六小时,又来爬同样的内容!

每一周,他要用20%~100%的工作时间,处理这些爬虫造成的服务器压力。SourceHut 已经中断服务好几次,对于一个 SaaS 工具,这是致命的。

最后,他说不只他遇到这种事,整个行业都深受其害。

"我的系统管理员朋友,都在处理同样的问题。每次我坐下来和他们喝啤酒或吃晚餐时,我们很快就会抱怨机器人。这些对话中的绝望是显而易见的。"

那么,有什么办法,可以对付这些 AI 爬虫?

最简单的方法,就是使用 Cloudflare 公司的免费防护,它的 CDN 可以帮你挡掉 AI 爬虫。

但是,有些企业级服务不适合使用 Cloudflare,这时你就必须自己来挡爬虫。

今天,向大家介绍一个专门对付爬虫的工具 Anubis。
帅云网络
它是一个采用工作量证明的反向代理。所谓反向代理,就是目标网站的所有访问请求,都会重定向给它。

你首先要架设一个它的实例,然后把这个实例放在目标网站之前,当作反向代理(比如像下面设置)。

reverse_proxy http://localhost:3000

于是,用户访问网站时,首先看到不是目标网站,而是 Anubis 的页面(下图)。
帅云网络
这个页面会在用户的浏览器上,执行一段 JS 程序,进行大量的数学计算。直到计算答案正确,才可以访问目标网站。

这个过程有时很耗时,可能需要1~2分钟。
帅云网络
(图片说明:上图的手机浏览器用了1分53秒,才计算完毕。)

对于爬虫来说,如果每个请求都要耗费大量计算,才能拿到数据,这会极大地消耗它的服务器资源,从而达到阻止爬虫访问的目的。

当然,真实的访问者也必须完成这样一个计算,这非常影响使用体验。但是,总比听任爬虫造成访问中断要好。

那么,Anubis 到底让爬虫计算什么?

具体来说,就是下面这行代码,计算一个哈希值。

const hash = await sha256(${challenge}${nonce});

可以看到,它就是用 SHA256 算法,计算一个字符串的哈希值。

这个字符串由两部分组成,第一部分challenge,由用户的一些公开信息连接而成,包括用户的 IP 地址、浏览器 user-agent 字段、当前日期、Anubis 的公钥等。

第二部分nonce,表示迭代次数,第一次计算就是1,第二次计算就是2,以此类推。

Anubis 的默认设定是,计算出来的哈希值的前五位必须都为0,否则 nonce 自动加1,再次进行计算,直到满足要求为止。

有时,可能需要计算几百万次,才能得到合格的哈希值。熟悉比特币的同学,应该一眼看出来了,这就是比特币的算法。比特币是非常耗费算力的,所以 Anubis 也能很有效地消耗爬虫的 CPU。

当客户端终于算出满足要求的哈希值时(前五位为0),就会把这时的 nonce 值传给 Anubis 实例服务器,让后者验证哈希值是否正确。没问题的话,Anubis 就会将客户端重定向到目标网站,并在客户端写入一个 Cookie,以免后续请求再触发工作量验证。

这就是阻止爬虫的整个过程,不知道说清楚了没有,原理很简单,实施也不难。

事实证明,它很有效。一个站长说,两个半小时内,他的网站总共收到了81000个请求,其中只有3%通过了 Anubis 的工作量证明,这意味着97%的流量可能都是机器人!

这太疯狂了,可见现在的 AI 爬虫有多猖獗。如果你的网站也遇到了同样问题,又没法使用 Cloudflare,那可以试试 Anubis 的工作量证明。

标签: AI, AI爬虫

添加新评论