主流 CDN 服务如何配置防盗链 Referer 黑白名单?

文章导读
主流 CDN 配置防盗链最稳妥的方式是开启 Referer 白名单,并谨慎处理空 Referer 权限,适用于图片、视频等静态资源保护场景。
📋 目录
  1. A 快速处理思路
  2. B 主流云厂商配置差异
  3. C 分步处理细节
  4. D 怎么验证是否生效
  5. E 特殊场景:App 端鉴权
  6. F 常见坑
A A

主流 CDN 配置防盗链最稳妥的方式是开启 Referer 白名单,并谨慎处理空 Referer 权限,适用于图片、视频等静态资源保护场景。

先说结论:开启 Referer 白名单是防止资源被非法嵌入的核心手段,但配置不当会导致自身网站无法访问。

  • 适合:静态资源(图片、CSS、JS、视频)被盗用或带宽异常消耗的场景
  • 先准备:确认自身业务域名列表,包括主域名、子域名及第三方合作域名
  • 验收:配置完成后必须通过 curl 模拟请求验证,避免误杀正常流量

快速处理思路

CDN 防盗链通常在控制台的安全配置模块中,不需要命令行操作,但需要理清域名关系。

  1. 登录 CDN 控制台,找到域名管理列表。
  2. 进入目标域名的配置页面,定位到“防盗链”或“访问控制”模块。
  3. 选择 Referer 黑白名单模式,优先推荐白名单模式。
  4. 填入允许访问的域名,注意是否允许空 Referer。

主流云厂商配置差异

不同厂商控制台路径及协议匹配策略存在差异,以下是常见平台配置参考:

阿里云 CDN/DCDN

路径:域名管理 -> 目标域名 -> 防盗链 -> Referer 黑白名单。

注意:支持泛域名匹配(如 *.example.com),协议匹配策略需查阅最新文档,部分场景严格区分 http/https。

腾讯云 CDN

路径:域名管理 -> 目标域名 -> 访问控制 -> 防盗链。

注意:支持配置是否允许空 Referer,建议先测试再全量生效。

Cloudflare

路径:Security -> Hotlink Protection。

注意:Cloudflare 的 Hotlink Protection 是开关式,自定义 Referer 规则需使用 Page Rules 或 Workers 实现更精细控制。

分步处理细节

1. 收集合法域名

列出所有可能引用该 CDN 资源的域名。例如主站 www.example.com,论坛 bbs.example.com。如果有第三方合作(如外包宣传页),也需要列入。

2. 配置白名单

在 CDN 控制台选择“白名单”模式。填入域名时,通常支持泛域名匹配,例如 *.example.com。注意是否包含 http 和 https 前缀,大多数 CDN 只需填域名部分。

主流 CDN 服务如何配置防盗链 Referer 黑白名单?

3. 处理空 Referer

这是一个关键选项。如果允许空 Referer,用户直接在浏览器地址栏输入资源链接可以访问,下载工具也可能 bypass。如果不允许,某些旧版浏览器或隐私设置严格的客户端可能无法加载资源。建议先不允许,观察日志报错后再调整。

4. 保存并生效

配置保存后,CDN 节点通常需要几分钟同步。不要立即认为生效,需等待配置下发。

怎么验证是否生效

不要只用浏览器测试,因为浏览器行为复杂。推荐使用 curl 命令模拟。

测试允许访问:

curl -e "http://www.example.com/" -I http://cdn.example.com/image.jpg

预期返回 200 OK。

测试禁止访问:

curl -e "http://evil.com/" -I http://cdn.example.com/image.jpg

预期返回 403 Forbidden。

测试空 Referer:

curl -I http://cdn.example.com/image.jpg

根据配置,预期返回 200 或 403。

注意:如果配置后仍返回 200,请检查是否触发了本地缓存或 CDN 边缘节点缓存,尝试刷新缓存后再测。

特殊场景:App 端鉴权

App 内请求通常不带 Referer 或 Referer 固定,如果禁止空 Referer,App 可能无法加载资源。此时 Referer 防盗链不再适用,建议采用以下方案:

  • URL 鉴权(Token 认证):配置 CDN 鉴权 Type A/B/C,通过服务端生成带过期时间的签名 URL 供 App 请求。
  • 独立域名:App 资源使用独立域名,不配置 Referer 白名单,仅通过鉴权控制。

常见坑

  • HTTPS 跳 HTTP:不同厂商对协议匹配策略不同,部分忽略协议,部分严格匹配,请务必查阅对应厂商文档。
  • 子域名遗漏:只配置了主域名,忘记配置子域名,导致部分页面资源加载失败。
  • 缓存优先级:如果资源已经被缓存且之前是公开的,某些 CDN 可能需要刷新缓存后防盗链才对新请求生效,或者边缘节点策略优先级问题。
  • 移动端 App:App 内请求通常不带 Referer 或 Referer 固定,如果禁止空 Referer,App 可能无法加载资源,需单独放行或采用 Token 鉴权。