使用防盗链策略避免非法流量盗用

更新时间: 2024-02-26 14:09:03

通过在OSS中配置基于请求标头Referer的访问规则,可以阻止某些Referer访问您的OSS文件,从而防止其他网站盗用您的文件,并避免由此引起的不必要的流量费用增加。

使用场景

  • 禁止未经授权的使用:保护图片、视频、音频等敏感或有版权的文件不被未经授权的网站下载或访问。

  • 节省带宽和资源消耗:通过防止盗链,避免其他网站直接链接到自己的资源文件,减少了非法访问带来的带宽消耗和服务器资源压力。

  • 付费内容保护:在提供付费内容的场景中,防盗链可以确保只有购买者才能访问和使用付费内容,防止非法传播和盗版。

  • 合作伙伴授权访问:某些情况下,需要与合作伙伴网站共享资源或数据,通过防盗链可以限制只有特定合作伙伴可以访问和使用共享资源。

基本概念

  • 盗链:是指在一个网页内,以链接的形式嵌入另一个网页的内容,从而获取他人的资源而不经过授权。

  • 防盗链:在OSS中,是指通过配置Referer来防止其他非法网站或用户盗用您的OSS资源。

  • Referer:HTTP请求头部中的一个字段,包含了请求的来源页面的URL。通过检查Referer头部的值,可以判断请求的来源页面。Referer检查通常用于以下两种场景:防盗链。例如,网站访问自己的图片服务器,图片服务器通过Referer来判断是否为自己的域名,如果是就继续访问,不是则拦截;数据统计。例如,统计用户是从哪个链接过来访问的。

  • 空Referer:HTTP请求中Referer头部的内容为空,或者HTTP请求中不包含Referer头部。如果存在以下两种情况,则Referer为空:当请求并不是由链接触发产生。例如直接通过浏览器输入地址打开页面;从HTTPS页面上的链接访问到非加密的HTTP页面时,在HTTP页面上是检查不到Referer的。

  • 白名单:一种限制只允许特定来源访问资源的列表。在防盗链中,可以配置一个白名单来定义允许访问资源的Referer来源。

  • 黑名单:一种限制阻止特定来源访问资源的列表。在防盗链中,可以配置一个黑名单来定义阻止访问资源的Referer来源。

  • QueryString:HTTP请求中的一部分,用于在URL中传递参数信息。它通常包含在URL的问号后面,以键值对的形式表示。

功能原理

当浏览器向OSS发送请求时,请求标头中将包含Referer,用于告知OSS该请求的页面链接来源。如果配置了防盗链,OSS将根据请求的Referer与配置的Referer规则来判断是否允许此请求:

  • 如果浏览器附带的Referer与黑名单Referer匹配,或与白名单Referer不匹配,则OSS将拒绝该请求的访问。

  • 如果浏览器附带的Referer与白名单Referer匹配,则OSS将允许该请求的访问。

image

例如,某个Bucket配置了白名单Referer为https://10.10.10.10

  • 用户A在https://10.10.10.10嵌入test.jpg图片,当浏览器请求访问此图片时会带上https://10.10.10.10的Referer,此场景下OSS将允许该请求的访问。

  • 用户B盗用了test.jpg的图片链接并将其嵌入https://192.168.0.0,当浏览器请求访问此图片时会带上https://192.168.0.0的Referer,此场景下OSS将拒绝该请求的访问。

判断逻辑

开启防盗链后,OSS会根据请求Header中的Referer地址判断访问来源的方式,确定是否允许当前请求。具体判断逻辑如下。

image
  1. 判断请求Referer是否为空。

    • 如果请求Referer为空,则查看是否允许空Referer。

      • 如果允许空Referer,则请求被允许。

      • 如果不允许空Referer,且白名单Referer列表为空,则请求被允许。

      • 如果不允许空Referer,且白名单Referer列表不为空,则请求被拒绝。

    • 如果请求Referer不为空,则执行步骤2

  2. 判断黑名单Referer列表是否为空。

    • 如果黑名单Referer列表为空,且白名单Referer列表为空,则请求被允许。

    • 如果黑名单Referer列表为空,且白名单Referer列表不为空,则跳过步骤3,执行步骤4

    • 如果黑名单Referer列表不为空,则执行步骤3

  3. 遍历黑名单Referer列表。

    • 如果黑名单Referer列表存在匹配条目,则请求被拒绝。

    • 如果黑名单Referer列表不存在匹配条目,则执行步骤4

  4. 遍历白名单Referer列表。

    • 如果白名单Referer列表存在匹配条目,则请求被允许。

    • 如果白名单Referer列表不存在匹配条目,则请求被拒绝。

注意事项

  • 仅支持针对整个Bucket设置防盗链,不支持为Bucket的某一个文件或文件夹设置防盗链。

  • 仅当通过签名URL访问Object(调用GetObject接口)或者匿名访问Object时,OSS会进行防盗链验证。

  • 当请求的Header中包含Authorization字段,OSS不会进行防盗链验证。

  • 一个Bucket可以支持多个Referer参数,这些参数之间通过,分隔。

  • 为Bucket配置防盗链后,所有权限(private、public-read、public-read-write)的Bucket都会检查Referer字段。

  • 当您使用OSS的Bucket域名(例如bucketname.oss-cn-hangzhou.aliyuncs.com)预览MP4文件时,浏览器默认会同时发出两个请求,其中一个为带Referer的请求,另一个为空Referer的请求,因此设置防盗链时必须同时满足在白名单Referer中添加Bucket域名,且允许空Referer的条件。

  • 当您使用OSS的Bucket域名(例如bucketname.oss-cn-hangzhou.aliyuncs.com)预览非MP4文件时,仅需允许空Referer。

错误码

相关文档

阿里云首页 对象存储 相关技术圈