直播平台防盗链探究

  • 时间:
  • 浏览:15
  • 来源:区块链技术网

作者 | 张高旭 中国农业银行研发工程师

曾婷婷 中国农业银行研发工程师

责编 | 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,则验证通过并返回相应的资源,否则将禁止客户端的访问。

总结

文章介绍了当前主流的几种直播平台防盗链技术,并详细阐述了其工作机制,为直播平台的安全性建设提供了参考。此外,这些防盗链技术并非是只能单一使用,而是可以根据业务需求进行评估,从中选择几种结合使用,从而最大限度的保护资源不被恶意的盗用。

比如在直播业务中,推流主播端所需安全性较高,而数量通常较少;拉流观众端人数较多,但安全要求不高。因此可采用回源与时间戳结合的方式,在直播推流时采用回源方式,确保推流的安全可靠,而在拉流端采用时间戳的方式,保证直播流不会被未经授权的人随意获取到,且对于业务服务端并不会带来更大的压力,从而满足业务的各项需求。

猜你喜欢

全线暴跌,该来的还是来了

暴力杀多还是来了,大部分币种一天抹去过去一周的涨幅,全网爆仓超过10亿美元,身边一些合约大户,账户市值缩水50%的比比皆是,这就是我多次提示牛市期间不要动用高杆杠的原因。目前来看这一次下跌的量能有别于之前多次出现的回踩,所以短线出现V反的概率较小,操作上建议不要大规模抄底,关于如何看接下来的市场,先给大家看看雨神的分析。

2020-11-26

比特币骗局又来了吗?

今天比特币日线断头铡,吃掉了近9天的涨幅,也就是说,最近9天无论哪天你溜了,现在比特币的价格都比你走的时候低,风险来的时候,总是如此猝不及防。今天的下跌到现在这里基本告一段落了,晚间会有所反弹,但明天的行情仍然令人担忧,美国人都在休息,谁来支撑这个市场的上涨,又有谁来接住这个市场的获利盘。因此市场在美国休息这四天里,大概率不会太强,想抄底的,也不用太着急。短期压力位17800,支撑16000。

2020-11-26

跟我学 Solidity :开发环境

Solidity[3]是用于开发以太坊智能合约的最受欢迎的语言之一,因此,作为一个想要成为区块链开发人员的人,我决定学习如何使用 Solidity 开发智能合约。

2020-11-26

关于YFI合并Pickle和Cream的一些思考

YFI打响了DeFi领域并购第一枪,尽管并不是传统金融市场意义上的并购,更多是底层开发资源的整合与互通。YFI的目标也是非常明确,都是一些Fork类的DeFi项目。尽管我们平时都看不起这些Fork类项目,不过我们不能否认他们确实是有自己的微创新,以及自己的开发资源。

2020-11-26

比特币遭遇2020年黑色星期五,牛还在吗?

最近比特币价格波动很大,11月25日(昨天)攀升到了19500美元附近,直指近三年最高点,今天又回落至17000美元附近,下降幅度高达2500美元,24小时跌幅超10.5%。

2020-11-26