你的OSS资源是不是正在被“白嫖”?

上个月账单出来,发现OSS流量突然涨了一大截?点开监控一看,来源五花八门——有不认识的域名、一堆爬虫UA,甚至还有比价网站的logo缩略图在你CDN日志里反复刷屏。别怀疑,大概率是别人把你OSS里的图片、视频直接扒走用了。

防盗链到底是什么?为什么非设不可?

防盗链不是玄学,就是让OSS“认人”:只放行你点头同意的网站来调用资源。

浏览器每次请求图片或视频时,会悄悄带上一个叫 Referer 的头字段,告诉服务器“我是从哪个网页跳过来的”。OSS防盗链做的就是这件事——检查这个 Referer 是不是你名单上的熟人。

不是?那就拦下,返回403。不光省流量,也避免你的商品图出现在竞品页面、教学视频被搬运到知识付费平台卖课。

之前帮一个做美妆小程序的团队排查,他们主站的SKU图被三四家代运营公司和小红书笔记批量引用,外网流出流量翻倍还不止。加了防盗链后,无效请求当天就断了,账单肉眼可见地“瘦”下来。

在OSS控制台配置防盗链的详细步骤

不用写代码,5分钟搞定。登录阿里云OSS控制台 → 找到你要保护的Bucket → 左侧菜单进「安全管理」→ 点「防盗链」。

页面就两个关键开关:

  • Referer白名单:一行一个域名,比如 https://www.yourshop.comhttps://app.yourshop.com。支持通配符,*.yourshop.com 能覆盖所有子域名。
  • 是否允许空Referer:勾选=放行直接粘贴URL打开、微信聊天里点链接、邮件里点图这些场景;不勾选=更严格,只认带明确来源的请求。我们一般先关掉,后面根据实际访问情况再放开。

配置防盗链时,你必须绕开的3个大坑

坑一:域名写错格式
别写 https://yourshop.com/product/123,OSS只认到域名层级。正确写法是 https://yourshop.com。HTTP和HTTPS算两个不同来源,都得单独加。

坑二:忘了App和小程序
App内WebView加载OSS资源时,很多情况下 Referer 是空的,或者值是 about:blank。如果用户打不开图,先试试临时打开“允许空Referer”,再让客户端同学在请求头里补个固定值,比如 Referer: https://app.yourshop.com

坑三:没测就上线
配置保存≠万事大吉。立刻拿三台设备试:
✅ 用你自己的网站打开OSS链接(应该能看)
❌ 换个测试网页嵌入同一张图(应该403)
❓ 直接把OSS地址粘进浏览器地址栏(看是否被拦,决定要不要开空Referer)
上次遇到个客户,配置是对的,但CDN缓存了旧的403页面,用户看到的还是“老错误”,清完CDN缓存才正常。

除了控制台,用代码管理防盗链是否更灵活?

如果你管着十几个Bucket,或者上线新活动要自动加域名,手动点控制台真会手抖。这时候用SDK写几行代码,反而更快更稳。

比如Python里用阿里云官方SDK,设置白名单只要三步:

import oss2

auth = oss2.Auth('你的AccessKeyId', '你的AccessKeySecret')
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'your-bucket-name')

# 加两个域名,禁止空Referer
bucket.put_bucket_referer(['https://www.yourshop.com', 'https://m.yourshop.com'], allow_empty_referer=False)

发版脚本里顺手跑一下,新活动域名自动进白名单,比切窗口点十次控制台靠谱多了。

配置生效后,如何验证和监控效果?

验证不用猜,靠浏览器开发者工具:

  • 打开「网络」面板 → 刷新你网站页面 → 找到OSS资源请求 → 看状态码(200才是对的)
  • 右键复制那个OSS链接 → 新开无痕窗口粘进去访问 → 应该卡在403

监控盯两处:

  • OSS控制台「访问监控」里,403错误请求数会明显跳升(说明防盗链在干活)
  • 对比下「外网流出流量」曲线,非白名单来源的流量应该快速回落

和上月账单对照着看,成本有没有“松一口气”,比任何图表都实在。

遇到问题别慌张,常见故障这样排查

现象:自己网站也打不开图了
→ 先检查白名单域名协议是否匹配(HTTPS页面不能加HTTP域名)
→ 再看是不是混用了HTTP资源(比如HTTPS网页里写了 http://oss...),现代浏览器会直接屏蔽这种混合内容,Referer 也可能丢

现象:App里图全黑
→ 开发者工具抓包,看请求头里 Referer 是不是空的或异常
→ 如果是,让客户端在发请求时加个固定头:Referer: https://app.yourshop.com

现象:配置明明对,但还是被盗
→ 问一句:OSS前面有没有套CDN?
→ 如果有,CDN层也要单独配一遍防盗链,请求是先到CDN再转发给OSS的,两边规则得同步

今天下班前,用10分钟给你的OSS穿上“防盗衣”

现在就打开阿里云控制台(你天天登录的那个),找到最近一个月流量最高的那个Bucket。
路径:「安全管理」→「防盗链」→ 在Referer白名单里填上你的主站域名,比如 https://www.yourshop.com(记得带https)→ 把「是否允许空Referer」关掉 → 点「确定」。

保存后,立刻做两件事:
① 用你网站页面打开一张OSS图片(确认能显示)
② 把这张图的直链复制出来,在微信里发给自己,点开——如果看到403,说明它起作用了。

这一步做完,你已经挡掉了80%的乱引流量。剩下的,等明天早上泡咖啡时,再顺手把小程序、H5活动页的域名加上。