防盗链

最近更新时间:2018-06-20 11:16:23

功能介绍

腾讯云对象存储支持防盗链配置,建议您通过控制台的防盗链设置黑/白名单,来进行安全防护。

盗链案例

用户 A 在 COS 上传了图片资源1.jpg,得到可访问链接http://test-1250000000.cosgz.myqcloud.com/1.jpg,并且在他自己的网页http://a.com/a.html嵌入了该图片,能正常访问。
用户 B 在a.com上看到了图片,也在他自己的网页http://b.com/b.html嵌入了1.jpg的链接,B 的网页也能正常显示图片。
以上案例中,A 的图片资源1.jpg就被 B 盗链了。此时 A 在不知情的情况下,COS 上的资源持续被 B 网页正常使用,A 负担了额外的流量费用,造成了费用损失。

防盗链判断原理

防盗链是通过请求 Header 里的 Referer 来判断的:

  • Referer 是 Header 的一部分,当浏览器向 Web 服务器发送请求的时候,一般会带上 Referer,告诉服务器该请求是从哪个页面链接过来的,服务器就可以禁止或允许某些来源的网站访问资源。
  • 如果直接在浏览器直接打开文件链接http://test-1250000000.cosgz.myqcloud.com/1.jpg,请求 Header 里不会带有 Referer。

例如,下图是在http://127.0.0.1/test/test.html嵌入了1.jpg,访问test.html时就带有 Referer 指向访问来源:
referer_1

控制台设置说明

设置步骤

  1. 登录 对象存储控制台,进入左侧菜单栏【Bucket 列表】,选择需要设置防盗链的存储桶,进入存储桶。
  2. 在存储桶详情页,单击【基础配置】,找到防盗链设置,单击【编辑】按钮进入可编辑状态。
    防盗链设置1
  3. 确认当前状态为开启,选择名单类型(黑名单或白名单),设置好相应域名,设置完成单击【保存】即可。用户设置防盗链状态为开启后,必须填入相应的域名。
    referer_3

设置规则说明

  • 名单类型黑、白名单二选一:
    • 黑名单:限制名单内的域名访问存储桶的默认访问地址,若名单内的域名访问存储桶的默认访问地址,则返回 403。
    • 白名单:限制名单外的域名访问存储桶的默认访问地址,若名单外的域名访问存储桶的默认访问地址,则返回 403。
  • 配置规则示例:
    • 支持带端口的域名和 IP,如test.com:808010.10.10.10:8080等地址。
    • 配置test.com,可命中如test.com/123test.com.cn等以test.com为前缀的地址。
    • 配置test.com,可命中如https://test.comhttp://test.com为前缀的地址。
    • 配置test.com,可命中它的带端口域名test.com:8080
    • 配置test.com:8080,不会命中域名test.com
    • 配置 *.test.com,可限制它的二级、三级域名test.comb.test.coma.b.test.com
  • 设置域名支持最多十条域名且为前缀匹配;支持域名、IP 和通配符*等形式的地址;一个地址占一行,多个地址请换行。

设置示例

我们使用上文中的 盗链案例 来举例,介绍用户 A 如何通过防盗链设置防止用户 B 盗链图片:

  1. 用户 A 给存储桶 test 设置了防盗链规则,有两种方式可以防止b.com盗链,您可以根据您的实际情况选择:

    • 开启方式一:配置黑名单模式,域名设置填入*.b.com并保存生效。

    • 开启方式二:配置白名单模式,域名设置填入*.a.com 并保存生效。

  2. 开启了防盗链配置之后:

    • 访问http://a.com/a.html 图片显示正常。

    • 访问http://b.com/b.html 图片无法显示,表现如下图。
      referer_4

常见问题

存储桶打开了 CDN 加速,并使用 CDN 域名访问资源,防盗链配置会不生效?

由于域名是 CDN 域名,CDN 会有缓存,导致表现不稳定,需要到 CDN 控制台 配置防盗链。

能否设置白名单允许访问,并且浏览器单独打开链接也允许访问?

浏览器单独打开链接时,Referer 为空,当前暂不支持额外配置 Referer。

设置了存储桶 test 的防盗链白名单,允许a.com访问,但是a.com下的网页播放器却不能播放存储桶 test 下的视频文件?

网页中使用 Windows Media Player、Flash Player 等播放器播放视频链接时,在请求里的 Referer 为空,导致没命中白名单,建议换成黑名单的形式配置,让 Referer 为空时也能正常访问。