summaryrefslogtreecommitdiff
path: root/content/article
diff options
context:
space:
mode:
authoreltrac <hi@eltr.ac>2026-10-27 23:54:34 +0800
committereltrac <hi@eltr.ac>2026-10-27 23:54:34 +0800
commit13a76f72f16934aad6a059675716fcb4492ad8df (patch)
treea713eaf7a826a6fd3dae56bda2dc3932b1b0264a /content/article
parentc824cae7ece197de7348bef4a5580c969fef7f1f (diff)
[publish] /article/the-great-theft
Diffstat (limited to 'content/article')
-rw-r--r--content/article/the-great-theft.md46
1 files changed, 38 insertions, 8 deletions
diff --git a/content/article/the-great-theft.md b/content/article/the-great-theft.md
index 5f318813..422bec07 100644
--- a/content/article/the-great-theft.md
+++ b/content/article/the-great-theft.md
@@ -2,11 +2,12 @@
title = '声势浩大的知识产权盗窃'
subtitle = 'The Great Theft'
slug = 'the-great-theft'
-tags = ["AI","开源"]
-categories = ''
-date = 2026-10-25T22:46:12+08:00
-draft = true
+tags = ["AI","开源","Copyleft"]
+categories = '软件杂谈'
+date = 2026-10-26 13:41:18
+draft = false
toc = true
+fedi = 'https://akk.eltr.ac/objects/254c3101-7d43-40fb-9f77-26358fc113cd'
+++
之所以说「声势浩大」,是因为我成语储备不够,找不到「不要脸」的文雅说法。<!--more-->
@@ -19,7 +20,7 @@ toc = true
“奇怪,我 VPS 上跑的服务 CPU 占用都应该很低才对,为什么现在涨到 60% 了?”当时的我光顾着四处更新证书和排查漏洞,便没有细想。再后来,我给那台新机子装上了 [beszel-agent](https://github.com/henrygd/beszel) 配置监控和告警,瞟了一眼那台怪怪的机器——“我去,负载怎么红了?”从监控页面上来看,CPU 占用最高的容器是我的 Forgejo 实例。怪了,就算是我在编译软件,~~那 CPU 早该爆满了~~也应该是 Forgejo Runner 容器占用高才对。
-前几天我的 Continuwuity 实例突然暴毙,数据库也挂了,还得运行紧急修复,当时发现磁盘已经写满了。当时以为是 Akkoma 数据库没清理,毕竟我联邦的实例确实很多,跑了些基本的清理任务就没管了。可几天后,同样的事情又再次发生了。我扫瞄了一遍 `/var` 和 `/home`,才发现占满我磁盘的是 `Forgejo` 的 `repo-archive` 目录。
+前几天我的 Continuwuity 实例突然暴毙,数据库也挂了,还得运行紧急修复,当时发现磁盘已经写满了。当时以为是 Akkoma 数据库没清理,毕竟我联邦的实例确实很多,跑了些基本的清理任务就没管了。可几天后,同样的事情又再次发生了。我扫描了一遍 `/var` 和 `/home`,才发现占满我磁盘的是 `Forgejo` 的 `repo-archive` 目录。
等等,那是什么东西?
@@ -80,7 +81,7 @@ respond @blockCommit "Due to relentless LLM scrapers, I have turned off commits
## 无止尽的猫鼠游戏
-其实我不久前就做了 *Cookie Monster* 验证,也就是默认拒绝所有请求,返回空壳页面。空壳页面里带 `<script>` 标签,脚本做的事情就是帮用户设置一个 Cookie,然后刷新页面。带有这个 Cookie 的请求不会被拒绝。
+其实我很早之前就做了 *Cookie Monster* 验证,也就是默认拒绝所有请求,返回空壳页面。空壳页面里带 `<script>` 标签,脚本做的事情就是帮用户设置一个 Cookie,然后刷新页面。带有这个 Cookie 的请求不会被拒绝。
这种做法利用的是大部分爬虫不会执行 JavaScript,就算执行也不会开启 Cookies 的特性。Iocaine 默认除了 `User-Agent` 验证,还做了浏览器特征识别,但现在用无头浏览器的爬虫也到处都是了,并不稀奇。显然,这一波蝗虫轻而易举地越过了这些简单的反爬措施,持续攻击我的 CPU。
@@ -124,10 +125,39 @@ func main() {
于是,就可以根据字段出现的顺序生成哈希字符串,判断加密请求时由什么客户端发出的。这种指纹叫作 [JA3](https://github.com/salesforce/ja3)。所有用 Python 写的爬虫,如果调用的是同一个库,JA3 指纹都是一样的,能够立马识别。
-要伪装 JA3 指纹也不难,只需要**重新实现** TLS/SSL 客户端就好了。现成的库也老多了,比如 Go 语言的 [uTLS](https://github.com/refraction-networking/utls),如今的爬虫都会做 JA3 伪装。
+要伪装 JA3 指纹也不难,只需要**重新实现** TLS/SSL 客户端就好了。现成的库也老多了,比如 Go 语言的 [uTLS](https://github.com/refraction-networking/utls),如今的爬虫都会做 JA3 伪装。伪装的对象就是 Chrome 等真实浏览器的 TLS 特征,此外还要把操作系统、浏览器内核信息等设备信息伪装到位,比方说 TLS 层是 Firefox 的特征,但 UA 是 Chrome,甚至是 iOS 设备[^4],那必然是不可能的。
+
+另一个改装成本比较大的特征是 IP。众所周知,如果数据中心的 IP 段信誉不好,从这个 IP 发出来的邮件就很容易被拒收,这也是为什么很多 VPS 提供商默认禁用 SMTP 端口,就是为了防止用户发垃圾邮件搞坏 IP 信誉。服务器在建立请求时也可以根据 IP 判断这个请求来自数据中心还是真人用户,用公司网络或者某些小代理提供商的代理服务上网,很有可能被反爬系统拦截,就是因为 IP 看起来很可疑。
+
+住宅区的 IP 和数据中心的 IP 很容易区分,而大型爬虫一般都是部署在数据中心上的,所以对数据中心 IP 段的请求施加更严格的反爬措施就能够抵挡大部分爬虫…… 当然这是理论上的说法。
+
+现实情况是,有种东西叫作住宅代理,爬虫通过这种代理发送请求就可以伪装成来自住宅区的真实用户。这些 IP 是怎么来的呢?答案是[智能家电](https://spur.us/blog/smart-tv-apps-residential-proxy-sdks)。想不到吧?你的电视盒子就可能安装了住宅代理提供商的 SDK,悄悄地用你的网络给爬虫提供服务呢。
+
+我没了解过住宅代理的价格,但购入几十个 IP 做成旋转代理,就应该能够支撑相当高并发的爬虫,这对企业来说并不难负担。IP 一旦多起来,即便是严格的速率限制和封禁也拦不住它们了。
+
+除了在 TLS/SSL 层伪装成浏览器,爬虫还可以用真的浏览器。预设爬虫不会运行 JavaScript 也不会存 Cookies 的想法已经过时了,爬 Linux 内核的那群人还愿意用无头浏览器硬解高难度的 PoW 算法。富翁们都愿意给 LLM 砸钱,泡沫越来越大,这点成本对他们来说不足为奇,尽管 Anthropic 和 OpenAI 都远远没有盈利,但 _“AI 实在是太好用啦!”_。
+
+简单来说,那些爬虫完全有能力伪装成看起来完全真实的用户,并且以极大的规模和速率把你的整个网站都爬个遍。自建的 Git 服务器之所以成为重灾区,是因为人写的代码对他们来说最有价值,而且就算是小型的 Git 服务器,各种 commit 和 branch 的 URL 也非常多。
+
+这就是在 2026 年维护网站的现状。
+
+## 这就是偷窃
+
+微软高管称[这种爬虫是人类历史上最大的劳动成果窃贼](https://techcrunch.com/2026/09/17/microsoft-exec-called-ai-scraping-the-largest-theft-of-labor-in-human-history-new-unredacted-filings-reveal/)。事实也确实如此,OpenAI 和 Anthropic 等模型训练公司完全不在乎训练数据的**获取**是否合乎道德(即,有多少网站为他们的爬虫支付了更高的成本,在用户体验上做了妥协),也不在乎这些训练数据的**使用**是否合法合规(即,训练数据的授权协议是否允许使用者训练模型、是否需要署名、是否需要把衍生作品用同样的协议发布、是否允许用副本及衍生作品盈利)。
+
+我也得为他们辩解,他们的确是有*正当性*的。他们的正当性来自[美国特朗普政府的辩护](https://techcrunch.com/2026/09/02/u-s-government-sides-with-openai-on-issue-of-training-llms-on-copyrighted-material/),毕竟 _“AI 实在是太好用啦!”“国家不搞 AI 就要落后于人啦!”_
+
+无论怎么样,他们就是在耍流氓:
+
+1. LLM 公司贪婪地爬取整个互联网,规模之大,让许多服务器承受压力、站长承受账单;就算没有被爬,现在租赁服务器的价格也因为他们贪婪地购买硬件而变得难以支付。
+2. LLM 公司既无视道德又无视法律,顶着[没打完的官司](https://en.wikipedia.org/wiki/Anthropic#Legal_issues)继续爬数据,还要[摧毁珍贵书籍](https://annas-archive.gl/blog/physical-destruction.html),滥用著佐权也践踏著作权。
+
+最后我想提醒读者,通过任何渠道(无论是直接订阅他们的模型还是通过 OpenRouter 这样的分销商)给他们提供金钱,都是在向市场发送「我们容忍这种行为」「我们用金钱支持这种行为」的信号。如今能避免 LLM 的人可能很少了,或许只有送钱送得多还是少的区别,但这依旧是区别。
[^1]: 顺带一提,他们其中一个证书的密钥是 `4`。我十一月份的正刊一定会写这件事的。
[^2]: 如今手写的比例正在逐渐下降,你知道 Linus Torvalds [也用 Claude Code 写 Bug](https://thenewstack.io/torvalds-claude-code-kernel/) 吗?
-[^3]: 要是周一回去发现是自家公司的爬虫干的就好玩了。
+[^3]: 要是回去发现是自家公司的爬虫干的就好玩了。
+
+[^4]: iOS 上没有真 Chromium,全都是 AppleWebKit。