防盗链的核心思想是通过验证请求来源或携带的签名,判断该次访问是否被允许,从而阻止非授权站点或盗链工具直接引用你的静态资源。常见机制包括 Referer 校验、时间戳+签名(token)校验、和回源白名单等。Referer 校验简单但易被伪造,适合防止普通盗链;而基于 签名防盗链 的方案通过私钥生成短期有效的 URL 或 URL 参数,能有效抵御伪造与热链接滥用。
1) Referer 白名单:只允许来自指定域名的请求;2) 签名(Token):URL 携带签名参数与过期时间;3) 回源白名单/黑名单:控制哪些回源可以访问源站。
签名防盗链 > 回源白名单 ≈ Referer 白名单(取决于实现)。签名方案更适合对抗脚本和伪造请求。
使用时优先考虑签名防盗链,配合HTTPS可防中间人篡改签名参数。
在七牛云控制台的 CDN 域名管理里,选择目标域名进入“安全防护”或“防盗链”配置页面。主要步骤包括:启用防盗链类型(Referer 或签名),填写白名单域名或配置签名密钥与有效期,保存并发布配置。
1) 选择签名算法(通常为 MD5 或 HMAC);2) 设置签名密钥(保证私密且定期更换);3) 指定签名参数名和过期时间(例如 t=timestamp 与 token=签名);4) 检查回源配置以确保回源请求也被允许。
在控制台填写密钥后,可在本地或应用层生成带参数的访问 URL(如 /path?e=expiry&t=token),测试有效期、不同 Referer 的访问效果,并观察七牛控制台或日志是否有拦截记录。
上线前在测试域名或小流量下验证签名逻辑,避免误封正常流量。
签名防盗链通常由资源路径、过期时间与密钥经过哈希生成。注意路径和参数的编码一致性,避免不同平台(浏览器、服务端)因 URL 编码差异导致签名不匹配。同时要控制签名过期时间平衡安全与用户体验。
1) URL 中存在查询参数或中文路径未统一编码,导致签名校验失败。2) 服务器时间不同步引起过期判断误差。3) 多级反向代理或 CDN 缓存影响请求参数传递。
用 curl 测试带签名的 URL,查看返回头部与状态码;对比本地与 CDN 校验的签名字符串;确保服务器时间同步(NTP)。
定期轮换签名密钥、使用较短的有效期、对敏感资源启用更严格的签名规则。
七牛云 CDN 支持为加速域名配置 HTTPS,可以选择上传自有证书或使用七牛提供的证书托管与申请服务(含免费证书支持与自动续期)。在控制台的 HTTPS 或证书管理中,添加或申请证书并绑定到 CDN 域名,启用强制 HTTPS 与 HSTS(如需要)。
1) 自有证书:适合企业已购买证书并需特殊配置;2) 七牛托管证书/免费证书:运维简单、支持自动续期;3) Let’s Encrypt:若七牛支持自动申请,推荐用于降低运维成本(以控制台说明为准)。
启用 HTTP/2 或 HTTP/3(QUIC)可提升并发与延迟,配置合适的 TLS 协议与密码套件,开启证书压缩与 OCSP Stapling(若七牛支持)。
证书链不全、域名未做 CNAME 指向七牛或证书 CN/SAN 未包含实际域名会导致浏览器报错,检查证书链与 DNS 配置并等待证书生效时间。
遇到问题时建议按步骤排查:查看 CDN 日志与访问返回头、用 curl 或浏览器开发者工具复现问题、检查 DNS 与 CNAME 配置、确认控制台的防护规则是否已生效与发布。
1) 证书未生效:检查证书是否已绑定域名、是否完成 CNAME 指向并等待证书签发时延;2) 签名报错:对比本地生成逻辑与七牛要求的哈希算法、URL 编码、时间戳参数;3) 资源被盗链:启用签名防盗链并观察拦截日志,逐步收紧白名单。
使用 curl -I 查看响应头(如 X-Cache、Server、Location),用浏览器 Network 面板检查请求参数与 Referer,查看七牛控制台的访问日志和拦截记录以获取错误码和触发策略信息。
定期演练证书更新与密钥轮换、对防盗链策略进行灰度发布、在业务侧记录 CDN 返回的错误码以便自动告警。
