curl -I -e "https://a.com" https://cdn.a.com/a.jpg
curl -I https://cdn.a.com/a.jpg
aws s3api get-bucket-policy --bucket b

配了 Referer 白名单只允许本站域名,站内正常,从微信分享出去的页面图片全 403。日志里这些请求的 Referer 是空的。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。

追下去是这么回事:微信内置浏览器打开分享页时可能不带 Referer,客户端直连也不带。防盗链规则把空 Referer 当成非法来源直接拒绝。只按 Referer 判断本身容易被伪造,挡不住真正的盗链。

「防盗链 Referer」排查到最后往往是很小的一处差异,前面那些复杂猜测可以先放一放。同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

把这次用到的命令存进笔记,比记住结论有用,换个环境还能照着走。改完隔一天再看一次,当场正常不代表能稳住。

处理上按这个顺序:规则里允许空 Referer 通过 再观察异常流量;对图片加短时效签名 替代单纯 Referer 校验;确认 CDN 透传 Referer 没有被改写;用 curl 带不同 Referer 各测一次。

确认没问题再收工,不带 Referer 的请求返回 200,伪造外站 Referer 的请求仍被拒。

作者 9823189