访问控制

视频直播支持通过设置Referer黑白名单、User-Agent黑白名单、IP黑白名单进行访问控制,本文介绍视频直播访问控制功能、适用场景和使用方式。

简介

访问控制是在云端配置视频资源的访问策略,达到基本的保护目的,具有使用门槛低(仅云端配置不需要额外开发)、快速生效等优点,主要手段有:

  • Referer黑白名单

  • User-Agent黑白名单

  • IP黑白名单

说明

User-Agent黑白名单,由于配置繁琐且存在误操作风险,暂未开放控制台设置,如有需求可以提交工单联系阿里云技术支持。关于如何提交工单,请参见联系我们

适用场景

  • 访问控制的使用门槛很低,只需简单配置即可使用,能起到一定的保护作用,特别是Web端。

  • Referer和User-Agent都基于HTTP Header,容易被伪造,安全性低。

  • IP黑白名单机制,无法实现内容分发给大量C端用户,不适合广泛的内容消费场景。

Referer黑白名单

  • 介绍

    • 基于HTTP协议支持的Referer机制,通过Referer跟踪来源,对来源进行识别和判断,用户可配置访问的Referer黑、白名单来限制视频资源被访问的情况。

    • 访客对资源发起请求后,请求到达CDN节点,节点会根据用户预设的防盗链黑名单或白名单进行过滤:符合规则可顺利请求到视频数据;若不符合,请求会被拒绝,并返回403响应码。

    • Referer黑白名单是可选配置,默认不启用。

    • 配置后会自动添加泛域名支持。例如填写example.com,最终配置生效的是*.example.com,所有子级域名都会生效。

    • 支持设置是否允许空Referer字段访问资源,即允许通过浏览器地址栏直接访问资源URL。

  • 使用方式

    • 控制台:具体操作请参见防盗链

    • API:通过调用BatchSetLiveDomainConfigs接口,可批量配置直播域名,包括Referer黑白名单。

      java sdk设置Referer防盗链的示例代码如下:

      //需要<>内容替换成实际使用的值
      DefaultProfile profile = DefaultProfile.getProfile("<regionId>", "<ALIBABA_CLOUD_ACCESS_KEY_ID>", "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>");
      IAcsClient client = new DefaultAcsClient(profile);
      BatchSetLiveDomainConfigsRequest batchSetLiveDomainConfigsRequest =new BatchSetLiveDomainConfigsRequest();
      batchSetLiveDomainConfigsRequest.setDomainNames("<DomainNames>");
      batchSetLiveDomainConfigsRequest.setFunctions("[{\"functionArgs\":[{\"argName\":\"refer_domain_allow_list\",\"argValue\":\"<referer_white_domain_list>\"},{\"argName\":\"allow_empty\",\"argValue\":\"<off>\"}],\"functionName\":\"referer_white_list_set\"}]");
      try {
          BatchSetLiveDomainConfigsResponse response = client.getAcsResponse(batchSetLiveDomainConfigsRequest);
          System.out.println(new Gson().toJson(response));
          //todo something
      } catch (ServerException e) {
          e.printStackTrace();
      } catch (ClientException e) {
          e.printStackTrace();
      }
      说明
      • 以上示例代码表示:为<DomainNames>设置Referer防盗链白名单,白名单域名列表为<referer_white_domain_list>,且不允许空Referer访问(allow_empty值为<off>)。

      • 使用JAVA SDK,具体请参见Java SDK使用说明

  • 注意事项

    重要
    • 黑、白名单互斥,同一时间您只能选择一种方式。

    • 由于移动端一般拿不到Referer,当前默认支持空Referer访问,可选择关闭。如果设置为不允许空referer访问,在移动端可以配合阿里云播放器设置referer。

    • 当您设置不允许空Referer访问时,请务必配置HTTPS安全加速,并开启强制跳转HTTPS(HTTP>HTTPS)。部分浏览器处理HTTPS请求HTTP的资源时,会移除Referer,导致无法访问。

  • 示例

    当设置播流域名demo.developer.aliyundoc.com的Referer白名单为example.com,且不允许空Referer访问。

    1. 请求数据:

      curl -i 'http://demo.developer.aliyundoc.com/apptest/stream0000'
    2. 返回中包含:

      X-Tengine-Error:denied by Referer ACL
    3. 当请求带上允许的Referer后即正常返回:

      curl -i 'http://demo.developer.aliyundoc.com/apptest/stream0000' \
      -H 'Referer: http://www.example.com' 

User-Agent黑白名单

  • 介绍

    User-Agent是一个特殊字符串头,帮助服务端识别用户使用的操作系统及版本、CPU类型、浏览器及版本、浏览器渲染引擎&语言和插件等。可通过User-Agent黑白名单来限制特定浏览器或终端的访问。

  • 使用方式

    提交工单联系阿里云技术支持。关于如何提交工单,请参见联系我们

  • 示例

    • 如PC端IE9浏览器:

      User-Agent:Mozilla/5.0(compatible;MSIE9.0;WindowsNT6.1;Trident/5.0;
    • 可模拟HTTP请求验证:

      curl -i 'http://demo.developer.aliyundoc.com/apptest/stream0000' \
      -H 'User-Agent: iPhone OS;MI 5'

IP黑白名单

  • 介绍

    支持配置IP黑名单或白名单,拒绝或只允许特定IP的访问。

    • 添加IP到黑名单,那么该IP无法访问当前加速域名。

    • 添加IP到白名单,那么只有该IP能够访问当前加速域名。

    • 支持IP列表添加,并支持添加IP网段。

      例如:网段127.0.0.0/24,24表示采用子网掩码中的前24位为有效位,即用32-24=8bit来表示主机号,该子网可以容纳28-2=254台主机,故可表示IP网段范围:127.0.0.0~127.0.0.254。

    • 支持IPV6地址。

  • 使用方式

    • 控制台:具体操作,请参见IP黑白名单

    • API:通过调用BatchSetLiveDomainConfigs接口,可批量配置直播域名,包括IP黑白名单。

      java sdk设置IP黑白名单的示例代码如下:

      //需要<>内容替换成实际使用的值
      DefaultProfile profile = DefaultProfile.getProfile("<regionId>", "<ALIBABA_CLOUD_ACCESS_KEY_ID>", "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>");
      IAcsClient client = new DefaultAcsClient(profile);
      BatchSetLiveDomainConfigsRequest batchSetLiveDomainConfigsRequest =new BatchSetLiveDomainConfigsRequest();
      batchSetLiveDomainConfigsRequest.setDomainNames("<DomainNames>");
      batchSetLiveDomainConfigsRequest.setFunctions("[{\"functionArgs\":[{\"argName\":\"ip_list\",\"argValue\":\"<127.0.0.0/24>\"}],\"functionName\":\"ip_allow_list_set\"}]");
      try {
          BatchSetLiveDomainConfigsResponse response = client.getAcsResponse(batchSetLiveDomainConfigsRequest);
          System.out.println(new Gson().toJson(response));
          //todo something
      } catch (ServerException e) {
          e.printStackTrace();
      } catch (ClientException e) {
          e.printStackTrace();
      }
      说明
      • 以上示例代码表示:为<DomainNames>设置IP白名单,白名单IP列表为<127.0.0.0/24>。

      • 使用JAVA SDK,具体请参见Java SDK使用说明

  • 注意事项

    重要
    • 黑、白名单互斥,同一时间您只能选择一种方式。

    • 最多可配置1000个IPv6地址,或者3000个IPv4地址。IPv6地址中的英文字母不区分大小写,不支持::缩写格式。