这里记录每周值得分享的科技内容,周五发布。([通知] 下周清明假期,周刊休息。)
本杂志开源,欢迎投稿。另有《谁在招人》服务,发布程序员招聘信息。合作请邮件联系([email protected])。
封面图
杭州临平的"天空草莓"农场,草莓种在悬空的钢架上,可以按需升降。(via)
如何阻止 AI 爬虫
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 的工作量证明。
科技动态
1、中国矿业大学研发了一款太空挖矿机器人。
它共有6足,其中3个是前进的轮子,3个是挖矿的爪子。
2、英国民众本周纷纷报告,夜空中发现螺旋状的云。
英国气象局调查后宣布,那是猎鹰9号火箭发射时,快速旋转的箭体喷出的尾气。
尾气在太空中瞬间冻结,经过太阳光反射,看上去像云一样。
3、科学家提出,生命起源地可能不是大海,而是封闭的大型碳酸钠湖泊。
因为生命起源的化学反应,需要很高的磷浓度,但是自然界(包括大海)的磷含量很低,只有富含磷的碳酸钠湖泊符合条件。
4、盈通公司推出一款有香味的 GPU。
这款 GPU 内置了香味剂。运行时,它的散热风扇就会将香味吹出去。
5、其他
(1)根据 Cloudflare 统计,41%的互联网登录使用泄漏的密码,原因是大部分用户习惯复用同样的密码。
(2)中国睡眠研究会统计,2025年中国人夜间平均睡眠6.85个小时,比去年增加6分钟。入睡时间平均为0点18分,比去年晚了17分钟。
(3)一项研究提出,每天的进食时间限制在8小时之内,其他16小时不进食,有利于肥胖者减肥,改善健康。
文章
1、Gemini 2.5 Pro 模型
本周,谷歌发布它的最强模型 Gemini 2.5 Pro,迅速登顶。
著名程序员 Simon Willison 对其进行测评,评价很高。
另有一个程序员让其执行一个非常复杂的任务,它想了半天后说,这个任务太复杂,不可能在一个步骤中完成,只能做出一个简化版。
这让人非常震惊,因为以前的 AI 遇到做不了的事情,只会给出错误的答案,而现在竟然会在分析后,承认超出了自己能力。
2、谷歌将不开放安卓的开发(英文)
这篇报道称,谷歌将完全私有化安卓的开发,不再接受外部的代码提交,以避免安卓开源版 AOSP 与内部版本之间合并分支的麻烦。
以后,谷歌会把安卓新版本先提供给 OEM 厂商,然后再发一个不接受外部提交的开源 AOSP 版。
3、Next.js 的中间件漏洞(英文)
本周,Next.js 爆出一个高危漏洞。如果登录步骤是在中间件里面完成,那么可以绕过这个步骤,直接进入登录状态。本文简要介绍什么代码导致了这个漏洞。
4、TypeScript 如何写函数类型(英文)
本文是一篇初级教程,介绍函数的类型在 TypeScript 的三种写法。
5、我对 MCP 的批评(英文)
MCP 是 Anthropic 公司提出的一个 AI 应用的接口协议,作者认为它并不好用,给出了自己的理由。
6、只使用 ESM 模块(英文)
本文提出,现在可以放弃 JS 语言的 CommonJS 模块了,只使用 ESM 模块,一个原因是require
命令已经支持加载 ESM 模块了。
工具
开源的 VS Code 插件,通过图标生成 flex、grid 布局的 CSS 代码。(@xutao-o 投稿)
一个桌面应用(支持 Windows 和 Mac),基于 FFmpeg 进行直播录制,覆盖40+国内外主流直播平台。(@ihmily 投稿)
B 站历史观看记录管理工具,可以保存观看记录,支持视频下载、数据分析、AI 摘要等功能,采用 Python + SQLite 开发,分为前端和后端。(@2977094657 投稿)
4、GoRead
一个用 Go 语言编写的终端里面的 EPUB 阅读器。(@Ray-D-Song 投稿)
一个 Go 语言写的命令行工具,用于一行命令切换网关,适合同时有 OpenWrt 路由和默认路由的环境。(@ourines 投稿)
6、Drawnix
开源的在线白板工具,集成了思维导图、流程图、画笔。(@pubuzhixing8 投稿)
它将小米云服务里面的小米笔记,转换为 Markdown 格式保存到 Obsidian 文件夹。(@emac 投稿)
8、wxlogin
一个基于 Next.js 的开源应用,基于微信公众号的网站登录,用户通过公众号获取验证码,从而在网页端登录。(@liyaodev 投稿)
9、Docxy
开源的 Docker Hub 镜像代理服务,可以通过它拉取容器镜像。(@harrisonwang 投稿)
10、Bondma
一个开源的多语言翻译管理平台,提供直观的 Web 界面。(@HeroIsUseless 投稿)
11、DeepPDF
免费的 PDF 文件翻译网站,比如英文 PDF 翻译成中文,保留排版不变。(@icaohongyuan 投稿)
12、RSSPod
收听、订阅播客的网站。(@Jaksay 投稿)
网友投稿的 WebSocket 的 JS 客户端库,支持心跳机制、断点重连、事件订阅和文件传输。(@JustinGastby 投稿)
一款在线工具,基于幻灯片制作创意草图和动画。 (@chunrapeepat 投稿)
15、LinkAndroid
开源的手机连接助手,方便连接 Android 和电脑。(@modstart 投稿)
一个在线的提词器,为演讲者、视频创作者和直播主播提供文本提示,可以定制各种属性。(@s87343472 投稿)
AI 相关
开源的 AI 应用,根据文字描述和图片生成网页,使用 Claude AI 模型,部署在 Cloudflare worker。(@mggger 投稿)
开源的 AI 数字人生成工具。(@modstart 投稿)
免费的 AI 挡脸工具,将脸部替换成 Emoji 符号。(@Takea-nap 投稿)
AI 模型翻译字幕文件的免费网站。(@LetheTK 投稿)
资源
1、DNS 速度测试
这个网站测试从你的计算机到世界主要公共 DNS 服务器的速度。
另有一个类似的命令行工具 dnspy。(@xxnuo 投稿)
2、Orbit
该网站提供一种可视化的方式,发现你喜欢的新音乐。
该网站展示"黑客新闻"实时的热门文章,有插图和内容总结。(@heyppen 投稿)
一个 AI 音乐网站。(@250465043 投稿)
5、旅行插头顾问(Travel Plug Advisor)
该网站查询世界各地的插头类型和电压。(@imowen 投稿)
图片
1、地球和太阳的大小
太阳的大小远超地球,直径是地球是109倍,体积是130万倍。
上图中,左下角的蓝点就是地球。
所以,一丁点的太阳能,就足够地球使用。
2、AI 生成表情包
上周,OpenAI 开放了 GPT-4o 的图片生成功能。网友发现,只要上传一张图片,就可以用它生成表情包,效果极佳。
提示词是:"请把照片里面的角色画成 Q 版,并用12个动作和文字做成表情包。"
文摘
我喜欢从头开始写东西,经常有人说,我在重新发明轮子。
我这样做有好几个理由。
(1)学习。通过重新发明轮子,我学到了很多东西,知道了工作原理,以及怎么动手做。
(2)定制。没有一种轮子适合所有情况。通过创建自己的轮子,我可以根据具体情况定制,让它更适合我。
(3)创新。现有的一些轮子很糟糕,重新发明轮子时,就有机会探索新的可能性。
(4)享受。事实上,前面三条理由可以不存在,重新发明轮子只是因为我喜欢动手,出色完成工作时,我会有一种满足感。
但是,我不推荐你也这样做。重新发明轮子并不都那么美好,有一些不可忽视的缺点。
(5)重新发明轮子可能很耗时,需要投入大量时间。
(6)最终产品可能不如现有解决方案。
(7)容易陷入无限递推的困境。为了制造轮子,我还必须重新发明锤子吗?
所以,如果你想重新发明轮子,一定要想清楚两点。第一,你有足够时间吗,尤其是涉及其他人的情况下。第二,重新发明的范围(或者说,你不打算重新发明什么),以免不必要地偏离主题。
言论
1、
一个优秀程序员,最开始是实施者(implementer),然后进化到解决者(solver),最后变成发现者(finder)。
2、
如果你正在开发一款希望长久使用的产品,那么前端框架就是你最不需要做的技术决策。你争论哪一个框架好的时间,都是在浪费精力。
无论你选择什么框架,5年后都会过时,即使那时你选择的框架还存在,也会变得完全不同,这就是前端社区的运作方式。
-- 《前端跑步机》
3、
在2025年开发 Web 应用,有点像组装宜家家具。你必须拼凑和配置许多单独的服务:前端、后端、cdn、https、数据库、身份验证、付款......
你的工作不是写代码,而是配置、管道、编排、工作流、最佳实践。
-- Andrej Karpath,著名 AI 科学家
4、
愤怒是一种具有破坏性的情绪,会让人产生报复的欲望,这不利于你的根本利益。更理性的方法是,不要先想到报复,而要想想你与对方有没有共同利益,寻求合作和谅解。
-- 《超越愤怒》
5、
各种宗教都驱逐异教徒,不是因为他可能是错的,而是因为他可能是对的。
往年回顾
xz 后门的作者 Jia Tan 是谁?(#296)
永不丢失的网络身份(#246)
掌机的未来(#196)
网课应该怎么上?(#146)
(完)
test 说:
4、aisubtranslate.top AI 模型翻译字幕文件的免费网站。(@LetheTK 投稿)
这个网站有问题,打开后主机风扇就开始加速关掉后恢复,应该是这个网站运行的代码很占用系统资源造成的。
2025年3月28日 08:55 | # | 引用
hitripley 说:
大部分的工具都没有一点想打开看看的欲望,发现自己老了...
2025年3月28日 09:00 | # | 引用
胡 说:
沙发!表情包那个有意思,哈哈~
2025年3月28日 09:03 | # | 引用
Sam 说:
事实证明,它很有效。一个站长说,两个半小时内,他的网站总共收到了81000个请求,其中只有3%通过了 Anubis 的工作量证明,这意味着97%的流量可能都是机器人!
————
也许很多真人也都走了罢了。
2025年3月28日 09:13 | # | 引用
Jusuf 说:
看到了工作量证明。我在想如此长时间的等待,可能对人类用户也不友好。
我觉得可以尝试:
1:给 z-index 很下面的 a 标签链接,在上面覆盖背景层。保证真实用户无法点击。如果访问到该链接的地址,认为是嫌疑用户
2:按 user-agent 检查 caniuse,给出 worker 计算和 wasm 计算,如果无法调用相关功能或报错,认为是嫌疑用户
给嫌疑用户按浏览器指纹加上工作量证明,这样就避免了一些误伤
2025年3月28日 09:33 | # | 引用
Gaubee 说:
中国睡眠研究会统计能否给出具体的链接?因为我自己猜测,平均睡眠的增加,可能是受人口结构变化的影响较大。比如国内中年人口变多了,导致平均下来多了。
2025年3月28日 09:41 | # | 引用
dante 说:
篇头是Anubis的推广吗?这也太扯淡了。。典型的杀敌一千自损八百,为了泼脏水孩子也不要了。。
AI爬虫是被你拦住了,正常用户也都流失了
2025年3月28日 09:46 | # | 引用
RavelloH 说:
既然已经用这种计算哈希的方式方式进行工作量证明了,或许直接拿来分布式挖矿会更有收益一点,毕竟要做的事都差不多
2025年3月28日 10:03 | # | 引用
Redon 说:
这是「杀敌八百自损一千」,说到底还是攻防,但是用这种方法,笑死了????
2025年3月28日 10:11 | # | 引用
fdf 说:
这种拦截的方法得不偿失
2025年3月28日 10:17 | # | 引用
DeathGhost 说:
哈哈,说明你懂得多了
2025年3月28日 10:55 | # | 引用
loker 说:
4o 的表情包里中文是怎么做到的?Q版可以实现,但是中文文字不行,生成了好几次,都不行。
2025年3月28日 11:02 | # | 引用
zhenfeng.wang 说:
"愤怒是一种具有破坏性的情绪,会让人产生报复的欲望,这不利于你的根本利益。更理性的方法是,不要先想到报复,而要想想你与对方有没有共同利益,寻求合作和谅解。"
前提是对方还能有与人交流的能力,现在很多人都是拟人生物罢了。
2025年3月28日 11:05 | # | 引用
cfancc 说:
Anubis那个是在搞笑吗?
2025年3月28日 11:17 | # | 引用
aa 说:
2025年3月28日 11:40 | # | 引用
昭格 说:
“愤怒是一种具有破坏性的情绪,会让人产生报复的欲望,这不利于你的根本利益。更理性的方法是,不要先想到报复,而要想想你与对方有没有共同利益,寻求合作和谅解。”
如果你略带一点理性,就应该知道让你愤怒的人可能不会考虑共同利益,而是只想给你挖坑看你出丑。
2025年3月28日 11:46 | # | 引用
linlijin 说:
没有用的,cookie保存的更久机器人越多还不如把cookie做短
2025年3月28日 11:47 | # | 引用
Karlbaey 说:
其实作为一个规模非常小的网站站长,真的不希望有什么天杀的 AI 爬虫造访……毕竟都是自己辛辛苦苦写的 blog,不希望它们会被拉去练什么模型。(尽管技术含量低但也是自己的心血)
不过看到这种杀敌八十自损一万的打法我还是不乐意用的,Cloudflare 五秒盾跟这比起来简直太友好了。坐等新的防 AI 爬虫算法吧,毕竟现在生态日新月异,有大佬用 AI 编程写出来防爬虫算法也未可知。(以子之矛攻子之盾了????)
2025年3月28日 12:24 | # | 引用
no 说:
Anubis 这种方式只会丢失用户,除非是必须要使用这个网站,否则绝大多数用户不会给它几分钟去运行一堆浪费资源的无用程序来证明自己只是普通用户,既然没有能力提供服务,那么我就去选择其他有能力提供服务又不需要浪费时间的网站,事实上,一个网站如果在5秒钟都没有打开,绝大多数用户就关掉了,并且下次也不会打开,每多一秒响应时间,都会损失一部分用户,这是上古SEO时期每个人都知道的事实
2025年3月28日 13:49 | # | 引用
rammiah 说:
Anubis这种搞个3s就行了,2分钟确实太逆天了
2025年3月28日 13:59 | # | 引用
Hu 说:
用户没有那个耐心去等待。而且哈希运算可能会让浏览器把你当作挖矿的恶意网站。
就算你说,我不关心用户有没有耐心等待。那也没有必要用哈希运算,完全可以干等两分钟,什么也不做。最后后端通过时间戳判断用户是否真的等待了两分钟就行了。
2025年3月28日 16:32 | # | 引用
ww 说:
AI时代来临,除非你想把你的思想散布到网络中,否则什么自认为有价值的东西都不要放到网上。
2025年3月29日 07:58 | # | 引用
Mr.he 说:
不知道老师对云服务怎么看,上云还是下云,怎么选呢
2025年3月29日 10:35 | # | 引用
Felix 说:
未来很多站点的SEO的方向可能都会要转向AI,因为人们的搜索习惯慢慢使用AI多于传统搜索引擎。什么时候 这些AI巨头们能共同设定一个 AIEO的标准,就像sitemap协议这样,以及AIBot.txt这样规则。
2025年3月29日 11:52 | # | 引用
solitas 说:
原话"In corporate religions as in others, the heretic must be cast out not because of the probability that he is wrong but because of the possibility that he is right."
“he”指代明确。翻译成中文,被分成两段,“他”的指代就不明确了。
2025年3月29日 14:37 | # | 引用
姓王者 说:
恐怕我的网站没有足够的吸引力,用户显然不能够为了防爬虫而等待那么长时间
经典的事实是,1s的等待时间已经是用户心里预期上限了,除非这个网页特别重要(比如说一些云服务器官网...)
2025年3月29日 17:03 | # | 引用
ss 说:
名字错啦,是 Karpathy 而不是 Karpath
2025年3月30日 17:49 | # | 引用
gooseguy 说:
> 各种宗教都驱逐异教徒,不是因为他可能是错的,而是因为他可能是对的。
在原文中,这是Dijkstra引用Antony Jay的一句话,并非Dijkstra本人所说。
2025年3月31日 00:20 | # | 引用
Xuan 说:
很棒的思路,爬虫应该对可见性没什么感知,看到链接就会想获取。
2025年3月31日 08:32 | # | 引用
wuqi 说:
我试了下其实真机跑挺快的,没看工作原理,直接访问试了下
2025年3月31日 10:48 | # | 引用
Tsien 说:
http://www.zgsmyjh.org/nd.jsp?id=945#_jcp=1 是华为可穿戴设备部分用户的睡眠统计,并不能代表中国人
2025年3月31日 11:30 | # | 引用
六个九十度 说:
正常用户会耐心等1分钟,而爬虫不会。
2025年3月31日 13:21 | # | 引用
老鱼 说:
信息被 AI 给抓取是技术发展的必然趋势,你没法对抗这个趋势。凡是阻碍信息自由流动的,不管是什么专利著作权技术都会被信息洪流给冲垮。与其对抗,不如想想有啥办法可以利用这个趋势吧。比如植入大量的推广内容,呵呵。
2025年3月31日 14:13 | # | 引用
老鱼 说:
前端开发一直追新,很多 js 程序员连 firefox 的兼容性都不测了。做半天也不出啥成果。
还不如 vue+es6 简简单单就能把很多系统给实现了。也差不了多少。
2025年3月31日 14:15 | # | 引用
walker 说:
其实他们害怕的并不是"对方可能是对的", 而是又多了一个抢饭吃的. 都知道对方是错的, 肯定不会害怕"会不会他说的真是宇宙真相?" 显然不是. 只是害怕对方传教罢了, 是不是真相不重要, 而且也压根不相信对方说的是真相. 异端言论多了对自己的怀疑就多了, 信仰就少了.
2025年3月31日 16:21 | # | 引用
dq 说:
1、为什么重新发明轮子
这个应该是一个系列的文章吧,能转载下就好了
2025年3月31日 18:44 | # | 引用
Khala 说:
"这个过程有时很耗时"
这么多人不看完文章就评论的吗?
还是看着剩下的流量 无法接受这个残酷的真相(笑)
这次是最好的方法,任何规则都可能被绕过.
唯有等价交换.
2025年4月 1日 10:53 | # | 引用
0xsunsama 说:
讨厌的ai小爬虫,真是无法无天了
2025年4月 1日 14:08 | # | 引用
神隐 说:
是的,大量不可见的广告,对正常人类用户没有影响,对爬虫就让它跳进去吧
2025年4月 1日 14:37 | # | 引用
花楹 说:
新的框架和预言都没有一点想了解的欲望了,发现自己老了……
2025年4月 3日 16:02 | # | 引用
wuqi 说:
其实文章里介绍的Anubis策略没有那么蠢,不然也不会有人用了,不过现在也没那么多人有耐心去看看这到底是个啥,小网站倒还真的可以用.
人家策略是:
1.User-Agent包含 "Mozilla"
2.请求路径不在 /.well-known 、 /robots.txt 或 /favicon.ico 中
3.请求路径显然不是 RSS 订阅
然后去做防护,正常访问,rss甚至正常爬虫都不会受影响,文章里其实应该写出来的
2025年4月 7日 08:56 | # | 引用
wuqi 说:
服务器流量要钱的,正常爬虫遵守robot.txt,ai爬虫不遵守,现在这个就是浪费ai爬虫的算力,我觉得算是不错的反制措施,这玩意是逐级做防护,首先看你是不是访问正常的路径,判断ua,本来也不阻止正常用户访问的
而且攻击端是openAI,还不要脸的换ip攻击,相当于对小网站ddos,量大了网站直接崩了压根没法正常访问,会直接减少"正常人类用户"
2025年4月 7日 09:49 | # | 引用
123 说:
加油
2025年4月 9日 14:46 | # | 引用
andy 说:
每个礼拜都会有新的技术分享,这是一个持之以恒的爱好~
2025年4月12日 13:46 | # | 引用