AI 视频平台如何防止恶意爬虫?
视频平台的盗链、剧集爬取和假量刷播放会同时吃掉带宽成本与推荐算法。本文从签名 URL、播放器接口、Bot 指纹到 CDN 成本治理,给出一套可执行的防护方案,并标注每层所需的 Cloudflare 套餐。
视频类流量和普通 Web 的三个差异
| 维度 | 普通页面 | 视频分发 |
|---|---|---|
| 单次会话请求数 | 数十个 | 成百上千个分片请求 |
| 带宽成本敏感度 | 低 | 极高,流出流量是主要成本项 |
| 盗刷隐蔽性 | 容易从 PV 异常发现 | 假播放量混在真实数据里,难察觉 |
正因为一个会话会产生海量分片请求,只做「每 IP 请求数」限流会立刻误伤正常用户——家庭宽带 NAT、移动网络出口、公司 Wi-Fi 都是共享 IP。视频场景必须先用签名令牌把「合法性」判据从 IP 转移到凭据上。
五个防护层次与落地顺序
1. 签名 URL 与短时效令牌(先做,不依赖任何套餐)。 每个播放会话签发带过期时间的令牌,令牌与用户会话/设备绑定,过期即失效。如果你用 Cloudflare Stream,可以直接用它的 signed tokens;如果是自建源站,这一层由应用层签发与校验。它的作用是把「拿到 URL 就能无限看」变成「拿到也只能用几分钟」。
2. 播放器接口的会话级限流。 对播放列表、分片、字幕/封面等元数据接口分别设配额,配额键优先用令牌里的用户或会话 ID,而不是源 IP。
套餐门槛要看清:标准版 Rate limiting rules 的计数维度受套餐限制——免费档只能按 IP 计数,Business 支持 IP 与「支持 NAT 的 IP」,只有 Enterprise 才额外提供 Path、Header、Cookie、Query、Host、ASN、Country、JA3/JA4 等维度。想把请求正文里的字段或 JWT 声明当作计数键,需要 Advanced Rate Limiting(Enterprise 付费附加项)。 因此:在多数套餐上,「按会话 ID 限流」应放在应用层(或网关),边缘只按 IP/路径做粗粒度抑制。
3. 识别非浏览器拉流。 脚本通常用 FFmpeg、curl 或 headless 内核直接请求 m3u8,缺少正常播放器会带的导航、指纹和节奏特征。Cloudflare 依据 TLS 指纹、请求序列规律性和浏览器环境完整性给出判断;对可疑请求下发托管挑战或要求通过 JS 校验,而不要一刀切封 IP。
细粒度 bot score(1–99)需要 Enterprise 的 Bot Management 订阅。Pro 与 Business 只有分组视图,且 「likely automated」分组在 Pro 上不可用(Business 起才有)。别把需要精确分值的策略设计在低套餐上。
4. 播放行为异常检测(应用层)。 关注三类信号:单会话分片请求速率远超正常播放速率(例如 1 秒下载 10 分钟内容)、仅请求元数据从不拉分片(疑似批量采集目录)、大量会话只有开始播放没有心跳(疑似刷量)。这三类都需要播放端埋点与服务端会话状态,边缘产品无法替你判定。
5. CDN 成本治理。 把「流出流量按目录/令牌/Referer 维度」的账单级指标接入告警。很多平台是账单暴涨后才发现被盗刷——成本控制点和攻击检测点必须是同一处。
常见威胁与对应控制
| 威胁 | 典型特征 | 控制点 | 谁能做 |
|---|---|---|---|
| 批量采集剧集目录 | 高频访问元数据、从不拉分片 | 元数据接口限流 + Bot 分组挑战 | 边缘抑制 + 应用层判定 |
| 盗链 / 嵌入播放 | 外站 Referer、无签名令牌 | 短时效签名 URL,Referer 仅作辅助 | 应用层签发 |
| 假量刷播放 | 多会话只有 play 事件、无心跳 | 会话完整性校验 + 去重计数 | 应用层 |
| 凭据填充撞库 | 登录端点失败率突增、来源分散 | 登录限流 + Bot 识别 + 二次校验 | 边缘 + 应用层 |
| CDN 流出成本失控 | 账单突增但 PV 平稳 | 按令牌/目录维度的带宽告警 | 应用层 / 计费系统 |
Cloudflare 能力 vs 应用层职责
| 事项 | Cloudflare 能给到的 | 套餐门槛 | 应用层必须做的 |
|---|---|---|---|
| 速率抑制 | Rate limiting rules | 全套餐,规则条数与计数维度随套餐递增 | 按会话/租户的精确配额 |
| 正文或 JWT 计数键 | Advanced Rate Limiting | Enterprise 付费附加项 | 低套餐下把计数放在应用层 |
| 自动化识别 | Bot Fight Mode / Super Bot Fight Mode / Bot Management | Free / Pro、Business / Enterprise 订阅 | 播放心跳与会话完整性判定 |
| 精确 bot 分值 | bot score 1–99 | Enterprise Bot Management | 制定各分值的处置策略 |
| 强身份与防盗链 | mTLS(全套餐可用,自定义 CA 限 Enterprise)、签名令牌 | 见左 | 令牌签发、绑定与过期策略 |
| 自定义规则 | WAF custom rules | Free 5 / Pro 20 / Business 100 / Enterprise 1,000 条 | 规则语义与误伤回滚 |
套餐与计费细节见 AI SaaS 如何防止 API 被恶意调用?。
边界与不适用情况
- 边缘计数器按数据中心独立累计(文档中有一个隐式强制的
cf.colo.id计数维度),且从检测到超限到执行动作可能有几秒延迟。文档也明确说明限流规则不是用来保证精确请求数的——不要把账务级配额押在边缘规则上。 - 面向第三方播放器的开放内容(例如允许合作伙伴嵌入),严格的浏览器指纹校验会误伤合法嵌入场景,应改为按合作伙伴签发独立令牌并在合同里写明配额。
- 纯下载型长视频(如课程视频打包下载)本身就会产生连续大流量,不能简单地用「分片速率」判定盗刷,需要结合购买关系判断。
- DRM 与录屏分发:Bot Management 解决的是「批量自动拉取」,不能阻止已授权用户录屏再分发;需要 DRM(Widevine / FairPlay / PlayReady)与数字水印组合,录屏属于网络防护之外的范畴。
- 合规与隐私:采集设备指纹用于 Bot 判定时,要同步考虑隐私声明与地区合规要求。
常见问题
Referer 防盗链为什么不可靠? Referer 由客户端控制,curl 一行就能伪造,只能作为辅助信号。真正的判据应该是签名令牌——过期即失效、与会话绑定。
签名 URL 会不会让 CDN 缓存失效? 令牌放在 query 里会让边缘缓存粒度变细。常见做法是令牌只保护「播放列表/鉴权」入口,分片路径仍可缓存,或用带路径前缀的令牌策略平衡缓存命中与安全性。
该封 IP 还是下发挑战? 共享出口普遍存在,优先挑战/限速;只对持续、明确、可归因的恶意来源才封 IP。
Bot Score 会误伤搜索引擎爬虫吗? 主流搜索引擎有可验证的反向 DNS 与抓取声明,应加入允许列表后再看剩余分数的分布,而不是放宽整体阈值。另外注意 bot score 的取值范围是 1–99(1 表示高度确信为自动化流量),0 表示「未计算」,不等于人类。
这套方案需要什么套餐? 签名 URL 与应用层配额不依赖套餐,可立即启动;边缘速率抑制全套餐都有,但规则条数和计数维度随套餐递增;按正文/JWT 计数或复杂度计分需要 Enterprise + Advanced Rate Limiting;精确 bot 分值需要 Enterprise Bot Management。建议先把第 1、4、5 层做完,再按预算决定边缘能力的档位。
相关阅读
参考来源
以下为 Cloudflare 官方文档页面,本文涉及的功能可用性、配额与限制以此为准;功能会随产品更新变化,以控制台实际可见项为准。
- developers.cloudflare.com/bots/concepts/bot-score/
- developers.cloudflare.com/bots/plans/
- developers.cloudflare.com/waf/rate-limiting-rules/
- developers.cloudflare.com/waf/rate-limiting-rules/parameters/
- developers.cloudflare.com/waf/rate-limiting-rules/request-rate/
- developers.cloudflare.com/api-shield/security/mtls/
- developers.cloudflare.com/waf/custom-rules/