作者 | 张高旭 中国农业银行研发工程师
曾婷婷 中国农业银行研发工程师
责编 | Carol
封图 | CSDN 付费下载自视觉中国
随着音视频技术的飞速发展,直播已成为当下最为炙手可热的技术。然而如何保障资源不被盗用,如何防止用户非法接入,对于直播平台至关重要。本文简要介绍了当下主流的几种防盗链,并对其机制进行了详细的分析,对直播平台的安全建设具有一定的参考价值。
为什么要有防盗链
当前国内直播平台百家争鸣,既有提供直播云服务的七牛云直播,腾讯云直播,也有提供应用的斗鱼直播,抖音直播。我们也基于开源直播框架搭建了一套直播平台,并实现了直播的一些功能。然而随着功能的不断完善,应用的不断扩大,也面临着如何保证私有资源不被别人窃取的问题。试想一下,如果教育网站的视频被人随意引用,这些作者的辛苦付出将付之东流;如果公司的直播服务被人随意接入,公司经营者将会遭受巨大的损失。由此防盗链技术应运而生,它能最大限度的防止资源被未授权的人轻易盗用,从而保障我们的利益不被侵犯。
主流防盗链介绍
目前,业内主流防盗链的实现方式主要有以下几种:
防盗链名称 | 规则简介 |
---|---|
IP防盗链 | 按照IP地址黑白名单来控制访问者的范围。 |
Referer防盗链 | 利用http请求头的Referer字段来防止资源被其他站点非法引用。 |
User-Agent防盗链 | 只允许特定的浏览器或专属客户端进行访问 |
回源鉴权防盗链 | 利用动态令牌对访问资源的请求进行回源鉴权,从而保证资源不被未授权用户盗用。 |
时间戳防盗链 | 基于MD5加密的时间戳对资源的可访问时间进行限制。 |
其中IP防盗链、Referer防盗链、User-Agent防盗链主要是利用普通客户端请求中所携带的一些关键信息来进行验证,其配置规则和实现原理都比较简单,由于这些关键信息都可能会被伪造,因此其可靠性较低。时间戳防盗链是基于加密时间戳来实现的,其资源访问具有时效性,可靠性相对较高,且比较容易与CDN结合,是目前使用最为广泛的防盗链技术。回源鉴权防盗链基于动态令牌来限制资源的访问,具有很强的实时性,最为安全,但实现相对复杂,且对服务器性能具有较高要求。下面我们将对各防盗链原理进行探究。
IP防盗链
IP防盗链是基于访问者IP地址进行访问限制的一种防盗链实现。由于在用户发起请求时,服务端可获取到客户端的IP地址。基于预先设定好的IP地址黑白名单,服务端将对客户端的IP进行过滤,在允许范围内的客户端可成功访问资源,而黑名单中的客户端将无法获取到资源,从而达到防盗的效果。其主要应用于一些有限范围IP的访问控制,如公司内部员工的使用,某个区域的用户使用等。
Referer防盗链
HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。如图所示,其Referer为www.baidu.com。因此可通过检查请求中的Referer信息,来对资源的请求进行控制,防止资源被其他网站恶意引用。其主要用于图片等一些静态资源的防盗控制,但由于其较易被伪造,因此安全性不高。
User-Agent防盗链
User Agent是用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。通过对客户端的User Agent进行过滤,可以限制访问资源的类型。同样,与Referer类似,由于User-Agent很容易伪造,因此其防盗链安全性也较低。
回源鉴权防盗链
回源鉴权防盗链是一种实时性、安全性很高的防盗链机制。当客户端请求资源服务器资源时,资源服务器会将收到的请求按照一定规则转发至业务服务器进行验证,如果验证通过则认为是合法请求,否则将拒绝本次资源请求。由于每次资源请求都需要回源到业务服务器进行鉴权,因此会增大系统的复杂度,增加客户端访问资源的等待时间,且会对业务服务器带来较大的压力。其过程大致如下图所示:
时间戳防盗链
时间戳防盗链是基于加密时间戳的一种防盗链,其每一个请求的url都具有一定的有效时间,当超过有效时间后,请求所对应的资源将无法继续被访问,因此它是一种相对安全可靠的防盗链机制。时间戳防盗链的url本身由于既要包含过期时间等相关信息,还要保证过期时间不被篡改,因此通常采用MD5算法对secret、过期时间expire、文件路径path等信息进行加密得到签名并加入url中,并在验证端(通常是CDN)进行验证。其整个过程通常分为以下几个步骤:
- 客户端发送原始资源请求给业务服务器。
- 业务服务器根据约定的算法计算防盗链签名sign,如sign = md5(secret path expire)。
- 业务服务器将带有防盗链签名、过期时间等信息的url返回至客户端。
- 客户端使用带有时间戳签名的url请求对应的资源。
- 资源方从url中获取相应信息,首先校验过期时间,若未过期则按照约定算法计算签名并与url中的sign进行比对,若一致才认为是有效请求。以上两点若存在一点不满足的情况,则认为是无效请求。
如下图,我们给出七牛云官方时间戳防盗链的生成,其最终访问url为:
http://xxx.yyy.com/DIR1/中文/vodfile.mp4?v=1.2&sign=b4b7f94dd7817ce0283b5491861c3936&t=55bb9b80
在资源方接收到请求时,会先校验过期时间55bb9b80,若当前时间不晚于20150801 00:00:00,则计算下值:
md5(9388f4ba63b89bba5b9b84aa70a92eaac099d39b/DIR1/中文/vodfile.mp455bb9b80) .to_lower(),若其值等同于b4b7f94dd7817ce0283b5491861c3936,则验证通过并返回相应的资源,否则将禁止客户端的访问。
总结
文章介绍了当前主流的几种直播平台防盗链技术,并详细阐述了其工作机制,为直播平台的安全性建设提供了参考。此外,这些防盗链技术并非是只能单一使用,而是可以根据业务需求进行评估,从中选择几种结合使用,从而最大限度的保护资源不被恶意的盗用。
比如在直播业务中,推流主播端所需安全性较高,而数量通常较少;拉流观众端人数较多,但安全要求不高。因此可采用回源与时间戳结合的方式,在直播推流时采用回源方式,确保推流的安全可靠,而在拉流端采用时间戳的方式,保证直播流不会被未经授权的人随意获取到,且对于业务服务端并不会带来更大的压力,从而满足业务的各项需求。
作者简介:
张高旭,研发工程师,就职于中国农业银行研发中心,从事即时通讯等领域研发工作;
曾婷婷,研发工程师,就职于中国农业银行研发中心,从事即时通讯等领域研发工作;