返回探索
指南VibeFix 编辑部更新于 2026年10月18日

网页水印与防爬实战:保护你的内容、图片和 API 不被薅秃

爬虫 24 小时批量搬走你的内容、图片和商品数据怎么办?从 Cloudflare 四层检测、JA3/JA4 握手指纹、抓爬检测规则,到签名 URL、水印取证与投入产出清单——一份算过账的中小站长防爬实战指南。

题图:数据中心机房内成排的服务器机柜与蓝色网线,象征网站边缘防护基础设施

先划三条界,免得和站内已有的指南撞车,也免得你读完发现"这不是我要的"。

本文不讲防黑客入侵:CSP、安全头、CSRF、依赖漏洞这些,请移步站内《Web 安全基线指南》(vibe-project-web-security-baseline-guide)。本文不讲防支付欺诈和薅羊毛:假人冒充真人下单、优惠券被机器批量领取,那是《反欺诈指南》(vibe-project-fraud-prevention-guide)解决的"人"的问题。本文不讲审核用户发了什么内容:色情、广告、辱骂的识别与处置,是《内容审核指南》(vibe-project-content-moderation-guide)的地盘。

本文回答的是站长的另一种焦虑:我的公开内容、图片、商品数据,被爬虫 24 小时不间断地批量抓走,怎么办?爬虫不黑你的服务器、不盗刷你的支付,它只是把你辛苦生产的东西一页一页搬走——搬去训练模型、搬去做竞品比价、搬去镜像你的整个站。从边缘层识别、内容层水印、资源层防盗链,到爬虫来了之后的成本控制与法务水位,本文全部是"保护我的资产",不是"拦截我的攻击者"。全文站在防守方一边:你不会在这里看到任何绕过 WAF、验证码或反爬系统的手段。

一个先验结论,放在开头:反爬没有银弹,只有成本交换。你投入的每一分钱、每一行配置,都是在抬高爬虫的抓取成本;当抓取成本高于内容价值,爬虫自然就去找更便宜的目标了。所以本文的终点不是"零爬虫",而是一份投入产出清单:免费层做到什么程度、每月 20–200 美元买什么、企业级才有什么、以及什么时候"什么都不做"反而是最优解。

一、现代反爬的四层检测:User-Agent 在握手阶段就死了

十年前反爬是 User-Agent 黑名单的游戏:看到 python-requests 就拦,爬虫换个 UA 就绕过去,双方在 HTTP 头里斗智斗勇。这个时代早就结束了。以 Cloudflare 官方文档描述的检测体系为例,现代反爬是四层漏斗,请求从上往下过,每一层都在回答一个不同的问题:

反爬四层检测漏斗图:网络层(IP 信誉/ASN)→TLS 握手层(JA3/JA4 指纹)→协议层(HTTP/2 帧与头部顺序/JA4H)→行为层(JS 挑战与行为打分),旁注 User-Agent 伪装在握手阶段即被识破

第 1 层 · 网络层:你从哪来。IP 信誉库、ASN(自治系统号)、机房 IP 段。数据中心 IP(AWS、阿里云、各类代理服务商的 ASN)天然可疑,住宅 IP 相对干净。这一层最便宜——查表就行,不用解密、不跑脚本。但它也最粗糙:爬虫换一批住宅代理 IP 就能部分绕过,所以它只是第一道筛子。

第 2 层 · TLS 握手层:你的"口音"是什么。这是反爬真正的分水岭。客户端在发送第一个 HTTP 字节之前,必须先完成 TLS 握手,而 ClientHello 里携带的密码套件列表、扩展列表、ALPN 协商顺序,就像一个人的口音——Python requests 的 OpenSSL 默认握手和 Chrome 的 BoringSSL 握手,听起来完全不一样。服务端据此计算 TLS 指纹(JA3/JA4,下一节细讲),伪装 User-Agent 的请求,在握手阶段就被识破了:UA 说自己是 Chrome,指纹却说自己是 Python,这种"表里不一"本身就是最强的爬虫信号。

第 3 层 · 协议层:你说话的方式对吗。HTTP/2 的 SETTINGS 帧参数、Header 的顺序和大小写(JA4H 指纹覆盖的就是这一层)、TCP 窗口大小。真实浏览器发送头部的顺序是固定的(比如 Chrome 总是把 :method、:authority、:scheme、:path 放在前面),而脚本库往往按自己的字典序发送。头都对了、顺序错了,照样露馅。

第 4 层 · 行为层:你的行为像人吗。JS 挑战(跑一段浏览器里才能执行的计算)、鼠标轨迹与页面停留、请求速率与路径模式、Cloudflare 的 bot score(1–99 分,低于 30 分通常判定为机器流量)。这一层最准,也最贵——要跑脚本、要建模、要持续观察。

理解这四层有什么用?两个直接的工程结论:第一,别再把预算花在 UA 黑名单上,那是 2015 年的打法;第二,反爬配置要按层取舍——免费层你只能拿到第 1 层加一点第 4 层(Bot Fight Mode),TLS 指纹级别的精细规则要花钱(第 3 节讲价格)。知道每层卖多少钱,才不会被厂商的演示页忽悠。

二、免费层能做什么:先把不花钱的事做到位

中小站长最常见的误区是反过来的:要么觉得"免费等于没用"直接跳过,要么以为开了个开关就万事大吉。免费层有三件武器,每件都有明确的效力边界。

武器 1:robots.txt——只管守规矩的爬虫。它的效力边界必须一次讲清:robots.txt 是一份"君子协议",只对遵守它的爬虫有效。Googlebot、Bingbot 这些正规军会看;恶意爬虫根本不读这个文件,直接开抓。所以 robots.txt 的正确用法是"声明意图 + 分流",而不是"防御":

User-agent: GPTBot
Disallow: /

User-agent: CCBot
Disallow: /

User-agent: *
Disallow: /admin/
Disallow: /api/internal/

上面这段的含义是:明确告诉 OpenAI 的训练爬虫 GPTBot 和 Common Crawl 的 CCBot 不要抓全站,同时把管理后台和内部 API 路径对所有爬虫关闭。写完之后要去搜索引擎的站长工具里验证是否生效。对于不守规矩的爬虫,robots.txt 的作用是零——这时候需要的是第 3、4 节的边缘层拦截,而不是在这个文件里加更多 Disallow 行。

武器 2:Cloudflare Bot Fight Mode——免费计划就能开的开关。在 Cloudflare 仪表盘 Security → Bots 里打开,所有计划(含免费)可用。它会自动挑战匹配已知爬虫特征的请求,不需要你写任何规则。定位要准确:它是"基线防护",能挡掉低端脚本和已知坏爬虫,挡不住认真做指纹伪装的对手。免费计划上它不能被 WAF 自定义规则绕过或跳过——要么开着接受误伤(可能误伤你的监控服务、支付回调这类合法自动化流量),要么关掉。Pro(20 美元/月)以上升级为 Super Bot Fight Mode,可以按爬虫类别分别设置放行/挑战/拦截,还能把保护扩展到静态资源。

武器 3:Cloudflare 的 AI 爬虫一键拦截 + X-Robots-Tag——防"训练抓取"专用。2024 年以来 AI 训练爬虫(GPTBot、ClaudeBot、CCBot、Bytespider 等)成了站长新的失血点。Cloudflare 在 Security → Bots 里提供了一键拦截已知 AI 爬虫的开关,所有计划(含免费)可用,Cloudflare 会持续更新爬虫指纹库;2026 年 9 月起,新接入的域名对 Training(训练)和 Agent(代理执行)类爬虫默认拦截(广告页面),Search(搜索索引)类不受影响。注意区分:训练爬虫和搜索爬虫是两拨人——拦掉 GPTBot 不影响你在 ChatGPT 搜索里的引用(那是 OAI-SearchBot 的事),拦掉 Google-Extended 不影响你的 Google 搜索排名。

那 X-Robots-Tag: noindex 呢?它的作用经常被高估:noindex 是告诉搜索引擎"不要把这个页面放进索引"(连带干掉搜索结果里的缓存快照),但它拦不住抓取本身——爬虫照样可以下载你的全文,只是不能出现在搜索结果里。想防训练抓取,靠的是上面这个 CDN 层的 AI 爬虫开关;noindex 解决的是"不要出现在搜索结果",是两个不同的问题,别混用。

免费层三件套总结:robots.txt 声明意图、Bot Fight Mode 挡低端脚本、AI 爬虫开关挡训练抓取。三件事加起来半小时能做完,挡掉 80% 的"顺手牵羊"型爬虫。剩下的 20% 是职业选手,那是付费层的活。

三、TLS 指纹实战:JA3、JA4 与 Cloudflare 抓爬检测规则

这是全文技术密度最高的一节,也是"钱花在哪"的一节。先把两个指纹标准的来龙去脉讲清楚,因为面试和方案评审里被问到的概率极高。

JA3:Salesforce 2017 年开源的 TLS 指纹先驱。原理很直白:把 ClientHello 里的 TLS 版本、密码套件列表、扩展列表、椭圆曲线等字段按固定格式拼接,算一个 MD5,得到 32 位十六进制字符串(比如 cd08e31494f9531f560d64c695473da)。同一个 HTTP 客户端库发出的握手千篇一律,指纹就稳定可识别。它有两个结构性缺陷:第一,MD5 是不透明哈希,两个指纹"像不像"完全看不出来;第二,GREASE 机制让它不稳定——Chrome 会在握手里插入随机哑元扩展(GREASE,Generate Random Extensions And Sustain Extensibility,本意是防止中间设备 ossify),导致同一台 Chrome 每次握手的 JA3 都不一样。Fastly 在 2023 年实测观察到 Chrome 110 之后经典 JA3 指纹迅速衰减成一条长尾。2025 年 5 月 1 日,Salesforce 归档了 JA3 的 GitHub 仓库,README 明确指向 FoxIO 的 JA4 作为继任者。

JA4:FoxIO 2023 年 9 月发布的继任者(创始人 John Althouse 即 JA3 原作者,离开 Salesforce 后创立 FoxIO)。它不是换个哈希算法那么简单,而是重新设计了指纹的形状:

  • 人类可读的前缀:t13d1516h2_8daaf6152771_e5627efa2ab1 这样的指纹,第一段 t13d1516h2 直接能读——t=TCP 上的 TLS、13=TLS 1.3、d=带 SNI 域名、15=15 个密码套件、16=16 个扩展、h2=ALPN 协商出 HTTP/2。不用查表就知道对方大概是什么客户端。
  • 排序后哈希,GREASE 感知:密码套件和扩展列表先排序再算 SHA256(截断 12 字符),GREASE 哑元值在计算前剔除。顺序抖动和随机哑元不再改变指纹——这正是 JA3 最痛的那个缺陷的解法。
  • 一整套指纹家族:JA4(TLS ClientHello)、JA4S(ServerHello)、JA4H(HTTP 层:方法、版本、头部名称与顺序)、JA4T(TCP 层)、JA4SSH、JA4Q(QUIC/HTTP3)。其中 JA4H 直接对应上一节的第 3 层协议检测——头部顺序本身也是指纹。

实战怎么用?Cloudflare 官方文档提供了一组"抓爬行为检测 ID"(Scraping detections),专门识别整站级别的批量抓取异常行为:

  • 50331648:按 ASN 维度动态分析请求模式,识别异常抓取行为;
  • 50331649:按 JA4 指纹维度动态分析,识别异常抓取行为。

在 Cloudflare 仪表盘 Security → Security rules → Create rule → Custom rule 里,可以用 Bot Detection IDs 写出这样的自定义规则(官方文档示例):

(any(cf.bot_management.detection_ids[*] in {50331648 50331649}) and not cf.bot_management.verified_bot)

这条规则的意思是:命中任一抓爬检测 ID、且不是已验证的正规爬虫(搜索引擎)→ 执行动作(建议先用 Managed Challenge,观察误伤率后再收紧为 Block)。not cf.bot_management.verified_bot 这一半很关键:它保证 Googlebot 这类已验证爬虫不受影响,你的 SEO 不会因此掉量。

预算预期警告(必读):Cloudflare 的 bot 评分体系是三档,价格泾渭分明——免费计划的 Bot Fight Mode 只有"一键开关",无精细控制;Pro(20 美元/月)起是 Super Bot Fight Mode,可按类别配置动作;精细的 bot score(1–99 分,可在自定义规则里写 cf.bot_management.score lt 30 这种阈值表达式)是 Enterprise 专属的 Bot Management 附加产品,按报价走,没有公开价。上面那条 detection_ids 规则能用在哪个计划,取决于你的 zone 是否开通了对应的 bot 管理能力——写预算时别被演示页的 score 阈值示例误导,以为 200 美元/月的 Business 计划就能玩转。Business 计划(200 美元/月)只有 Super Bot Fight Mode,没有 1–99 的精细 bot 评分。这句话值得单独成段,因为它是中小站长在这一节最容易花冤枉钱的地方。

四、行为层限流与挑战:登录页、搜索页、API 用三套配额

限流算法的细节(令牌桶、滑动窗口、GCRA)站内《限流指南》(vibe-project-rate-limiting-guide)已经讲透,本节只讲"对爬虫怎么配"——这是两个不同的问题:限流指南讲"怎么限",本节讲"限谁、限多狠"。

核心原则:按路径分级,按身份分档。不要给全站套同一个阈值。实战中至少分三档:

  • 登录/注册/找回密码页:最严。按 IP 限流(比如单 IP 每分钟 5 次),叠加 Turnstile(见下文)。这里防的是撞库和批量注册,不是爬虫,但配额思路相通——高价值入口配最紧的笼子。
  • 搜索页、列表页、筛选页:中等偏严。这是爬虫最爱的路径:一个搜索接口能吐出全站商品,一个翻页参数能遍历整个目录。按 IP + ASN 组合限流,阈值设为正常人刷页速度的 3–5 倍(比如单 IP 每分钟 60 次搜索请求)。超过阈值不直接封 IP,先上 JS 挑战——真人点一下就过去,脚本直接卡死。
  • 公开 API:按 key 或 IP 配额,未登录的匿名调用给很低的免费额度(比如每天 100 次),登录用户按套餐放宽。API 的限流键建议用"指纹+IP"组合键,单 IP 容易被代理池稀释。

Turnstile 三种模式怎么选(Cloudflare 的免费验证码替代品,不强制要求域名走 Cloudflare 代理也能用):Managed(托管模式,默认推荐:Cloudflare 按风险决定是否弹出复选框,大部分真人无感通过)、Non-interactive(非交互模式:显示一个加载中的小组件,全程不需要用户点任何东西)、Invisible(完全隐藏:在后台静默运行)。选型建议:登录/注册表单用 Managed——可疑流量会被要求点一下复选框;评论区、联系表单这种低摩擦场景用 Non-interactive;后台静默校验用 Invisible。注意 Turnstile 返回的只是"通过/不通过"的布尔结果,没有 reCAPTCHA v3 那样的 0–1 风险分数——想要分数做分级处置,那是 Enterprise Bot Management 的活(见第 3 节价格警告)。

一个常被忽略的点:限流响应本身也是信息。返回 429 时带上 Retry-After 头是标准做法,但不要在响应体里告诉爬虫"你触发了哪条规则、阈值是多少"——那等于把笼子的尺寸图纸递给对方。

五、内容水印:可见水印防君子,隐形水印做取证

水印有两个完全不同的物种,买之前先分清你在防谁。

物种一:前端动态水印——防"内鬼截图",不防爬虫。实现很直白:一层 fixed 定位的 Canvas 或 DOM 浮层,在页面上平铺"用户名 + 时间"的半透明文字,截图里必然带上泄密者身份。代码不过十几行,核心是水印内容动态生成(从登录态里取用户名,精确到分钟的时间戳),并且要防简单的 DOM 删除(MutationObserver 发现水印节点被删就重绘,顺便记一条日志)。它的威胁模型是"付费用户截图外传",对爬虫毫无作用——爬虫抓的是 DOM 和接口数据,根本不"看"屏幕。别指望它防爬,它防的是人。

物种二:图片隐形水印——事后取证,不是事前拦截。工程上有两条路线:LSB 隐写最简单,把水印比特藏进像素最低有效位,肉眼不可见,但 JPEG 压缩一次就全毁——适合原图分发的场景;DCT 域水印把信息嵌入 JPEG 压缩的中间频系数,能扛住一定程度的压缩、裁剪和转码,代价是实现复杂、要在图片处理管线里加一步。关键认知:隐形水印回答的是"这张图从哪漏出去的",而不是"别让别人下载这张图"。它是法务证据链的一环(第 9 节),不是拦截手段。指望水印"防下载",就像指望防盗标签"防进门"——用错了地方。

AI 生成内容的水印(一句话边界):C2PA 内容凭证是给图片/视频附加"谁生成、被谁改过"的可验证元数据(Adobe、索尼等相机厂商在推);SynthID 是 Google DeepMind 给 AI 生成内容(文本/图片/音频/视频)打的机器可读水印。两者都是"声明来源"的机制,都防不住决心抹掉元数据的对手——知道它们的存在和适用边界即可,不值得中小站长投入工程资源。

六、图片与静态资源防盗链:签名 URL 与 Referer 的真相

图片防盗链解决的是两个问题:别人直接盗用你的图床流量(热链),和爬虫批量下载你的原图。先算一笔账:假设你的商品图平均 200KB,一个爬虫一天抓 10 万张,就是 20GB 出站流量;在 R2/S3 这类按量计费的对象存储上,出站流量是真金白银。热链更亏:别人的网站引用你的图片,访客每打开一次他的页面,你的 CDN 就出一次流量,钱你出、转化他吃。

签名 URL:给每个图片 URL 加过期时间。原理是服务端用密钥对"路径 + 过期时间戳"做 HMAC 签名,URL 里带上签名和过期时间;CDN/对象存储验签通过才放行。S3、Cloudflare R2 都原生支持预签名 URL(presigned URL),Cloudinary 也有 signed URL。过期时间策略是关键工程决策:页面里嵌入的图片,过期时间设为几分钟到几小时——页面加载时服务端实时签发,用户正常浏览不受影响;爬虫把 URL 存下来第二天再来抓,全部过期。注意配套:签名 URL 必须配合"禁止搜索引擎缓存原图直链"(robots.txt 里 Disallow 原图目录,或用 X-Robots-Tag: noimageindex),否则 Google 图片搜索的缓存成了永久后门。

Referer/Origin 白名单:防君子不防小人。CDN 上配置"只允许来自本站域名的 Referer 访问图片",能挡掉 90% 的热链——因为热链者图省事,不会去伪造 Referer。但它的本质必须讲透:Referer 是客户端随便填的一个请求头,curl 一行命令就能伪造。对职业爬虫,它等于不存在。所以 Referer 白名单的定位是"低成本挡热链",防批量下载还得靠签名 URL。两者叠加用,不互相替代。

还有一个便宜但有效的手段:图片多尺寸分发。列表页只给 400px 缩略图,详情页给 1200px,原图只在用户明确点击"查看原图"(可要求登录)时签发。爬虫就算把全站图片抓完,拿到的也只是缩略图——商业价值大打折扣,而你的正常用户毫无感知。

七、API 层防爬:签名、复杂度与 SSR 数据裸奔

很多 vibe 项目的 API 是"裸奔"的:前端调什么接口,爬虫就调什么接口,参数一摸就透。API 层防爬做四件事。

1. 私有 API 签名:HMAC(timestamp + nonce) 防重放。移动端或自有前端调用敏感接口时,每个请求带三个头:X-Timestamp(当前时间戳)、X-Nonce(随机字符串)、X-Signature = HMAC_SHA256(secret, timestamp + nonce + 请求路径 + 请求体哈希)。服务端校验三件事:签名对不对(防篡改)、时间戳是否在 ±5 分钟窗口内(防过期重放)、nonce 是否在 Redis 里出现过(TTL 设为窗口的两倍,防窗口内重放)。secret 不要 hardcode 在前端 JS 里——前端代码是公开的,secret 放前端等于没放。Web 端正确的做法是:secret 只存在服务端,前端通过登录后的会话换取短期 token,签名在服务端代签或走 cookie 会话。记住威胁模型:API 签名防的是"照抄接口的脚本小子",防不住逆向你 App 的职业选手——但能把 90% 的顺手爬虫挡在门外。

2. GraphQL 查询复杂度与深度限制。GraphQL 的自描述特性是爬虫的天堂:一个 introspection 查询就能拿到整个 schema。生产环境第一件事就是关掉 introspection。第二件是限制查询深度(比如最多 7 层嵌套)和计算复杂度(给每个字段定"成本分",单次查询总成本设上限,超了直接拒绝)。不做这两件事,一个嵌套 20 层的查询就能把你的数据库打穿——这不只是防爬,是防自杀。

3. __NEXT_DATA__ 这类 SSR 数据裸奔的收敛。Next.js 的页面会在 HTML 里内嵌一个 __NEXT_DATA__ 的 script 标签,把服务端算好的 props 以 JSON 明文塞给前端做 hydration。爬虫根本不需要调你的 API,直接正则提取这个 JSON,就是一份结构化全站数据。收敛方法:敏感字段(成本价、供应商信息、未发布数据)在 getServerSideProps 里就过滤掉,不要指望前端"不渲染"——进 __NEXT_DATA__ 的每一字节都是公开的。更彻底的方案是把敏感区块改成客户端按需请求(登录后才调接口拿),或改用 React Server Components 让敏感数据根本不出服务端。

4. 价格/库存等敏感字段对未登录爬虫降级返回。这是投入产出比极高的一招:未登录请求看到的价格是"缓存 1 小时的公开价"、库存显示"有货/售罄"两档而不是精确数字;登录用户才看到实时价格和精确库存。爬虫拿到的永远是延迟、模糊的数据——做比价的爬虫拿到延迟 1 小时的价格,商业价值直接归零,而你的真实用户(登录了)毫无感知。实现成本就是一个"是否登录"的分支判断。

八、爬虫成本控制:被爬爆时的紧急开关

承认现实:再好的防御也有被爬爆的一天——可能是新爬虫换了指纹,也可能是你刚上 Product Hunt 被全网"学习"了一遍。这一节讲的不是"怎么防住",而是"被爬的时候怎么少亏钱、快恢复"。

先识别"高成本低价值"路径。不是所有被爬的损失都一样:文章详情页被爬,成本是一次 CDN 命中(几分钱);搜索页、筛选组合页、导出接口被爬,成本是每次都要回源查数据库,贵两个数量级。做法:给这三类路径单独做缓存(搜索结果缓存 5–10 分钟,爬虫和真人看到同一份缓存,结果一致性的损失可接受)或降级(爬虫命中的搜索请求返回"仅展示前 20 条,登录查看更多")。先保住数据库,再谈体验。

把爬虫流量和正常流量的 CDN 缓存命中率分开看。很多站长看的是全站缓存命中率 95% 觉得一切正常——实际上可能是"真人 99%、爬虫 40%"被平均了。在 CDN 分析面板里按 User-Agent 或 bot 判定维度拆分,一旦发现某类流量的回源率畸高,就是爬虫在逐页遍历你的动态路径。这时候去看第 3 节的 detection_ids 规则和第 4 节的路径限流,对症下药。

准备一个"紧急开关"清单,写下来,贴在团队 wiki 里。被爬爆的凌晨三点,你不会想现查文档:

  • Cloudflare WAF 一键规则:Security → Security rules,预先写好一条"挑战所有 cf.bot_management.detection_ids 命中 50331648/50331649 的请求"的规则,平时设为 Log(只记录不拦截),紧急时切到 Managed Challenge,一分钟生效;
  • 源站限流:Nginx 的 limit_req 或应用层的全局降级开关,把匿名 API 配额临时砍到 1/10;
  • 关闭导出/批量接口:feature flag 一键关停 CSV 导出、批量查询接口——这些接口平时方便用户,战时是失血口;
  • 通知:在团队群里发一条"已切应急模式",并记下时间,事后复盘用。

开关平时演练一次,确认每条真的能在 5 分钟内生效。没演练过的应急预案等于没有预案。

九、法务与合规水位:技术拦不住的,用条款和下架补

技术防御永远有漏网之鱼,法务是第二道防线——不是吓唬人的,是真能用的。三个水位:

水位 1:ToS(服务条款)里写清禁止批量抓取。条款写法有四个要点:明确定义"自动化访问"(包括爬虫、批量下载、AI 训练抓取);要求"事先书面同意"才能做上述行为;声明你保留限流、封禁 IP、终止服务的权利;写明数据的使用范围限制(比如"不得用于训练机器学习模型"——这句话在 AI 爬虫时代值得单独列一条)。找律师审一遍,模板条款在法庭上的效力取决于措辞,不要自己编。

水位 2:理解 robots.txt 和 ToS 的法律效力差异(一句话)。robots.txt 是技术层面的"礼貌请求",没有合同效力;ToS 是用户访问即同意的合同条款,违反它你可以发律师函、封号、起诉——一个是"请别进",一个是"进了算违约"。所以第 2 节让你写 robots.txt 是"声明意图",真正的牙齿在 ToS 里。

水位 3:DMCA 下架——对付"抓走又发布"。注意 DMCA(数字千年版权法)的适用场景:它管的是"对方把你有版权的内容重新发布了"(镜像站、盗版聚合站、把你的文章原样贴到他站上),这时候可以向对方的主机商或搜索引擎发下架通知(takedown notice),主机商通常 48 小时内处理。它不管"对方爬了你的数据自己用"(比如拿去训练模型、做内部比价)——那是 ToS 违约和不正当竞争的范畴,走律师函和诉讼。分清这两个场景,别拿着 DMCA 去投诉训练抓取,会被驳回。

最后一条防守方铁律重申:本文不提供任何绕过他人 WAF、验证码、反爬系统的手段。研究对手的技术原理是为了防守,不是为了进攻——本文的每一节都是"如果你是站长,怎么保护自己"。需要评估自家防御强度时,请用自己的测试环境,或请有资质的安全公司做授权测试。

十、中小站长投入产出清单:从免费到 Enterprise,怎么花钱

前面九节是武器库,这一节是购物清单。按预算分三档,每档写清"买什么"和"别买什么"。

第一档:免费层(0 元,半天工作量)。Cloudflare 免费计划 + Bot Fight Mode 开关 + AI 爬虫一键拦截 + robots.txt 声明 + 图片签名 URL(R2/S3 原生支持,不加钱)+ Referer 白名单防热链 + 未登录用户价格/库存降级。这套组合挡掉 80% 的顺手爬虫和 100% 的热链盗流量,投入产出比全场最高。绝大多数月活 10 万以下的内容站、独立小店,做到这一档就够了。

第二档:20–200 美元/月(Pro/Business)。当你发现免费层挡不住——日志里出现固定 JA4 指纹的高频抓取、搜索接口被遍历——再升级。买的是:Super Bot Fight Mode(按爬虫类别分别处置、保护静态资源)+ WAF 自定义规则(第 3 节的 detection_ids 抓爬规则、按路径的精细限流)+ 更长的日志保留(用来分析爬虫模式)。别买的东西:不要因为"想要 bot score 阈值"而买 Business——200 美元/月的 Business 没有 1–99 精细 bot 评分,那是 Enterprise 专属(见第 3 节)。为不存在的功能付费,是本节最想帮你省下的一笔钱。

第三档:Enterprise(报价制)。只有三类站长需要走到这一档:内容本身就是核心资产(图库、数据 API、付费研报),被爬一次损失远超防御成本;遭遇的是职业爬虫团队(住宅代理池 + 真浏览器 + 行为模拟),前两档的手段已验证无效;合规要求你必须有完整的 bot 审计日志。买的是:完整 Bot Management(1–99 bot score、自定义阈值规则、JavaScript 注入检测)、AI Labyrinth(给 AI 爬虫喂合成数据的蜜罐)、专属调优。注意:Enterprise 是按年报价的合同,不是"开一个月试试"的东西——走到这一步之前,先确认你的内容真的值这个价。

"什么都不做"的判断标准。反爬指南的最后一节,讲什么时候不反爬——这不是摆烂,是算账:

  • 你的内容没有商业壁垒(公开博客、个人作品集):爬虫抓走的是"引用",带来的是外链和流量,不反可能比反更赚;
  • 你正处在冷启动期:搜索引擎爬虫、AI 搜索爬虫是你唯一的流量来源,这时候开激进拦截等于自断流量——第 2 节讲的"训练 vs 搜索"区分在这里最关键:拦训练爬虫,别拦搜索爬虫;
  • 算过账:防御投入(订阅费 + 误伤导致的转化损失 + 维护规则的人力)> 被爬损失(带宽 + 服务器成本),那就把钱花在 CDN 缓存上,让爬虫爬得便宜点,而不是花在拦截上。

最后回到开头那句话:反爬是成本交换。希望你读完这篇,花的每一分钱都知道自己在买什么——买的是让爬虫"换个目标"的差价,而不是"天下无贼"的幻觉。你的内容值得被保护,但保护的方式,应该是算过账的。

阅读 0评论 0

评论 (0)

ME
0/1000
评论加载中...
浏览项目广场发布你的项目

相关文章

城市高空俯拍照片:暖色暮光下的密集街区与高楼,隐喻城市位置服务
指南
“附近的咖啡馆”怎么做:vibe 项目的位置与地图功能实战

从“附近的咖啡馆”到骑手实时位置:入库只存 WGS84、展示层再转 GCJ-02/BD-09,附近搜索走粗排精排两阶段,地图 SDK 先看合规再看价格,逆地理编码按 geohash 缓存,精确位置从采集侧就当敏感个人信息对待。

移动应用后端工程独立开发
视频剪辑时间线特写照片:显示器上可见剪辑轨道、调色轮与时间码
指南
用户传了个 4K 视频,服务器直接爆了:vibe 项目的视频处理管线实战

视频上传完只是开始:转码、多码率、HLS 切片、异步队列,缺一不可才能流畅播放。这篇给你完整管线架构图、FFmpeg 命令模板、HLS 参数甜点、BullMQ 状态机设计、缩略图/字幕/审核三个并行分支,以及上线前必须算的三笔成本账。

部署上线性能优化后端工程