Nginx静态资源防盗链必须采用IP黑白名单+Referer校验+secure_link三层防护,精准定位/images/products/等路径,用^~匹配,deny/allow控源,valid_referers兼顾空Referer,高敏感资源强制签名URL,统一返回占位图并记录日志。

要通过安全基线检查排查 Nginx 中静态资源盗链漏洞,核心是验证“是否仅靠 Referer 校验就放行关键资源”——这是绝大多数基线不合规的根源。真实攻击中,Referer 可被轻易伪造,单层防护等于形同虚设。必须确认是否已部署 IP 控制、Referer 白名单、secure_link 三者协同的纵深策略。
检查关键静态资源路径是否被精准隔离
基线要求对高价值资源(如 /images/products/、/docs/private/、/admin/js/)做独立 location 配置,且不混用 proxy_pass。若这些路径被泛匹配(如 location ~* \.(jpg|png|pdf)$)或直接放在 root 下,即视为风险项。
- 运行
nginx -T 2>/dev/null | grep -A5 -B5 "location.*\/images\/products",确认存在location ^~ /images/products/类精确前缀匹配 - 检查该 location 内无
proxy_pass,确保资源由本地文件系统服务 - 若发现
location / { ... }中统一处理所有静态扩展名,说明未做分级管控,不满足基线
验证 Referer 校验是否适配 HTTPS 且覆盖空值场景
全站 HTTPS 后,Referer 字段只在同协议请求中保留。基线检查会拒绝仅写 example.com 的白名单,也拒绝忽略 none 和 blocked 的配置。
- 在对应 location 中查找
valid_referers指令,确认包含https://example.com、https://www.example.com等完整 HTTPS 域名 - 必须含
none(支持直接访问、小程序、书签)和blocked(兼容隐私模式、代理屏蔽) - 若白名单使用正则,需为
~^https?://(www\.)?example\.com$,不能漏掉http?协议适配
确认高敏感资源是否启用 secure_link 签名机制
可下载类资源(PDF、Excel、原始图片)必须强制签名 URL,基线明确禁止仅用 Referer 或 IP 控制。未启用 secure_link 即判定为中高危漏洞。
- 检查
/docs/private/、/downloads/等路径 location 是否含secure_link $arg_md5,$arg_expires - 确认有
secure_link_md5 "secret_key$uri$arg_expires",且密钥未硬编码在配置中(应通过 env 或外部加载) - 若 URL 示例为
/file.pdf?md5=xxx&expires=1720512000,但 Nginx 配置里没有对应校验逻辑,则基线不通过
核查日志与兜底行为是否符合审计要求
基线要求所有盗链拦截必须记录原始 IP、URI、Referer、时间戳,并返回统一占位图或 403,禁止暴露后端路径或服务信息。
- 检查 location 内是否有
access_log /var/log/nginx/theft.log main;,且日志格式含$http_referer和$remote_addr - 确认
if ($invalid_referer) { return 403; }或secure_link失败时返回 403/410,而非 302 跳转或 200+错误页面 - 若配置了
error_page 403 /403.jpg;,需确保该图片为无敏感信息的占位图,且路径不在受保护目录下











