视频直播支持通过设置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访问。请求数据:
curl -i 'http://demo.developer.aliyundoc.com/apptest/stream0000'
返回中包含:
X-Tengine-Error:denied by Referer ACL
当请求带上允许的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地址中的英文字母不区分大小写,不支持::缩写格式。