规范化防盗链标准明确“谁来配、配什么、怎么验”,仅对/static/、/assets/、/marketing/及哈希前端产物启用referer校验,禁用/api/等关键路径;统一valid_referers白名单、403响应与日志归因,并纳入ci/cd卡点。

规范化团队开发的资源防盗链标准,核心是把“谁来配、配什么、怎么验”变成可复用、可审计、可交接的明确规则,而不是每次上线靠个人经验临时写一段 if ($invalid_referer)。
明确防护范围与资源粒度
避免“一刀切”式全局防盗链,统一规定只对以下三类资源启用 Referer 校验:
-
公开静态资源:图片(
.jpg/.png/.webp/.gif/.svg)、图标(.ico)、字体(.woff2/.ttf)——放在/static/或/assets/下的对应子目录 -
运营素材资源:活动页 Banner、落地页海报图等,路径统一为
/marketing/开头,后缀同上 -
前端构建产物:Webpack/Vite 构建生成的哈希文件(如
logo.a1b2c3.png),需确保其路径含哈希值且不被缓存穿透
禁止对 /api/、/favicon.ico、/robots.txt、主站 HTML 页面及 JS/CSS 入口文件启用防盗链;这些资源不依赖 Referer,误配会导致白屏或功能异常。
统一白名单策略与配置模板
所有项目必须使用标准化的 valid_referers 组合,不得自行增删基础项:
-
必选参数:
none blocked server_names—— 允许书签直连、App 内 WebView、HTTPS 中间代理等常见合法无 Referer 场景 -
域名白名单:仅允许当前项目
server_name及其显式声明的子域名(如www.example.com、app.example.com),禁止使用通配符*.example.com(防子域名失控) -
合作方域名:若需开放给第三方(如 CMS 后台、营销平台),须经安全组审批,以
https://partner-admin.example.net形式显式列出,禁止模糊匹配
标准 location 配置块示例(放入 server 块内,非 http 全局):
location ~* \.(jpg|jpeg|png|webp|gif|svg|ico|woff2|ttf)$ {valid_referers none blocked server_names www.example.com app.example.com https://cms.partner.io;
if ($invalid_referer) {
return 403;
}
}
拦截响应必须可控且可观测
禁止使用 rewrite ... redirect 跳转或返回提示图(易引发循环或二次盗链)。统一要求:
- 非法请求一律返回
403 Forbidden,响应头中添加X-Blocked-By: referer便于日志归因 - Nginx access_log 中必须记录
$invalid_referer和$http_referer字段,用于定期分析盗链来源分布 - 监控告警:当 403 状态码中
referer类型为“外部域名”且 QPS > 50 持续 2 分钟,触发企业微信告警
纳入 CI/CD 与上线卡点
将防盗链配置纳入工程化流程:
- 在项目 Nginx 配置模板中预置带注释的防盗链代码块,新服务初始化即自带合规结构
- CI 流水线增加
nginx -t+ 自定义检查脚本:验证是否存在未加none blocked的valid_referers、是否对.js/.css启用防盗链、是否使用了未审批的通配符 - 上线前由 DevOps 工程师在预发环境执行
curl -e "https://bad-site.com" https://test.example.com/static/logo.png验证拦截生效











