防盗链是指调用 OSS API 的 PutBucketReferer 接口设置 Referer, 用以防止他人盗用 OSS 数据。

说明 防盗链的 OSS API 接口详细信息请参见 PutBucketReferer
设置防盗链功能,包括以下参数:
  • Referer 白名单。仅允许指定的域名访问 OSS 资源。
  • 是否允许空 Referer。如果不允许空 Referer,则只有 HTTP 或 HTTPS header 中包含 Referer 字段的请求才能访问 OSS 资源。

例如,对于一个名为 oss-example 的 Bucket,设置其 Referer 白名单为https://www.aliyun.com/。则所有 Referer 为https://www.aliyun.com/的请求才能访问 oss-example 这个 Bucket 中的 Object。

操作方式

操作方式 说明
控制台 Web 应用程序,直观易用
命令行工具ossutil 命令行工具,性能好
Java SDK 丰富、完整的各类语言 SDK demo
Python SDK
PHP SDK
Go SDK
C SDK
.NET SDK
Node.js SDK
Ruby SDK

细节分析

  • Referer 验证
    • 用户只有通过签名 URL 或者匿名访问 Object 时,才会做防盗链验证。请求的 Header 中有 Authorization 字段的,不会做防盗链验证。
    • Bucket 的三种权限(private,public-read,public-read-write)都会做防盗链验证。
  • Referer 配置
    • 一个 Bucket 可以支持多个 Referer 参数。通过控制台设置时使用回车作为换行符分隔,通过 API 设置时使用英文逗号(,)分隔。
    • Referer 参数支持通配符星号(*)和问号(?)。
  • Referer 效果
    • Referer 白名单为空时,不会检查 Referer 字段是否为空(否则所有的请求都会被拒绝)。
    • 如果 Referer 白名单不为空,且不允许 Referer 字段为空,则只有 Referer 属于白名单的请求被允许,其他请求(包括 Referer 为空的请求)会被拒绝。
    • 如果白名单不为空,但允许 Referer 字段为空,则 Referer 为空的请求和符合白名单的请求会被允许,其他请求都会被拒绝。

通配符详解

  • 星号(*):可以使用星号代替 0 个或多个字符。如果正在查找以 AEW 开头的一个文件,但不记得文件名其余部分,可以输入 AEW*,查找以 AEW 开头的所有文件类型的文件,如 AEWT.txt、AEWU.EXE、AEWI.dll 等。要缩小范围可以输入AEW*.txt,查找以 AEW 开头并以 .txt 为扩展名的文件,如 AEWIP.txt、AEWDF.txt
  • 问号(?):可以使用问号代替一个字符。例如输入love?查找以 love 开头的一个字符结尾的文件,如 lovey、lovei 等。要缩小范围可以输入 love?.doc,查找以 love 开头的一个字符结尾并以 .doc 为扩展名的文件,如 lovey.doc、loveh.doc

更多参考

防盗链功能常见问题请参考OSS 防盗链(Referer)配置及错误排除