我们在提供视频点播(例如抖音视频流等)功能时,必不可少地需要保证视频点播的安全性,在本文中我们主要从以下两方面考虑可能会收到的攻击:
- 攻击者高频率的请求视频流推送,导致大量的带宽消耗。
- 盗窃者下载具有版权的视频进行方法传播。
本文主要参考阿里云官方文档对如何做安全防护措施进行简要概述。
高频访问流量攻击
针对攻击者高频请求视频资源的情况,如果不做特殊处理,不仅会造成带宽损耗,也会影响到正常用户的使用。
1、限制访问
针对攻击者高频访问视频地址的情况,我们可以通过限制访问的方式进行保护,主要有以下两大类四种:
- HTTP HEADER 鉴权
- Referer黑白名单
- User-Agent黑白名单
- IP鉴权
- IP地址黑白名单
- 限制独立IP访问次数
1.1、HTTP HEADER 鉴权
可以利用HTTP HEADER中的字段进行过滤,只有包含特定字段的HTTP请求才能正确返回视频。
1.1.1、 HTTP Referer字段
HTTP Referer是HTTP HEADER中的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。
在请求视频时,可以通过只响应携带自身网址的HTTP Referer的请求进行过滤。
然而想要这类的请求是极其容易伪造的,因此安全性较低。
1.1.2、User-Agent字段
User-Agent是一个特殊字符串头,帮助服务端识别用户使用的操作系统及版本、CPU类型、浏览器及版本、浏览器渲染引擎&语言和插件等。
在请求视频时,可以通过只响应特定User-Agent字段的请求进行过滤。
同样的,想要这类的请求是极其容易伪造的,因此安全性较低。
1.2、IP鉴权
1.2.1、IP黑白名单
黑白名单的做法是最为简单粗暴的,过滤掉频繁攻击的IP,让其无法访问,过滤特定IP地址或网段都可。
然而,在业务上线时,面临的请求是海量的,寻找出需要过滤的IP较为困难。
1.2.2、限制IP访问次数
可以采取对各网段/ip采取访问计数的方式,限制各网段/ip在特定时段内只能访问特殊次数。
然而,在业务上线时,面临的网段/ip各不相同,难以给出合适的阈值。同时,对于攻击者,在阈值内仍然可以做到对视频流的获取,造成资源浪费。
2、播放中心鉴权-URL鉴权
采取类似token的机制,在URL请求中附上auth_key,只有符合请求的auth_key才能被允许。
在阿里云中,auth_key的组成如下:
-
timestamp:auth_key有效期截止时间
-
rand:随机数
-
uid:用户id
-
md5hash:类似token的思想,但是计算方式不同
借用官方文档图片,URL鉴权流程如下:
1、开发者从服务商处开启URL鉴权服务,并且在自身服务器上构建返回鉴权URL的服务
2、客户访问服务器
3、获得鉴权URL
4、通过鉴权URL访问CDN节点
5、CDN节点获取到鉴权URL,先验证时间是否在截止范围前,之后再通过上文的md5hash算法,对比客户传来的auth_key是否与CDN节点生成的auth_key相对,是则返回资源。
窃取资源
在上述的方法中,针对有版权需求的视频,无法避免用户将视频下载至本地进行二次传播造成的侵权问题,因此需要有一项功能能够对视频进行加密,即使下载到本地也无法进行二次分发。
3、阿里云视频加密
视频加密主要可以分为两部分:视频加密转码+视频解密播放
3.1、视频加密转码
客户上传视频后,可以通过以下步骤进行视频的加密
-
0、客户上传视频至对象存储OSS
-
1、业务后台发起对视频进行加密的任务
-
2、媒体转码MTS从密钥服务处获取加密密钥=明文key+密文key
-
3、使用明文key加密视频,之后丢弃明文key
-
4、将加密后的视频与密文key保存进对象存储OSS
-
5、通知业务后台加密完成
3.2、视频解码播放
我们将请求播放的流程分为三部分:请求授权、获取播放地址与明文key、安全播放
-
1、请求授权
- 1.a、客户发送播放请求到业务端,业务端通过业务系统对请求进行鉴权
- 1.b、业务方子账号的AK访问控制访问RAM
- 1.c、控制访问RAM返回播放凭证至业务端
- 1.d、业务端返回业务授权的播放凭证
-
2、请求播放地址与明文key(此部分交予阿里云提供的安全SDK完成)
- 2.a、客户端将播放凭证与媒体ID参数传给阿里云播放服务
- 2.b、播放服务根据密文key向密钥管理服务请求明文key
- 2.c、密钥管理服务返回明文key
- 2.d、播放服务返回播放地址+明文key
-
3、解密播放
- 3.a、客户端用2中获取的播放地址向CDN请求资源
- 3.b、CDN返回加密过的资源,客户端通过2中获取的明文key解密播放
在上述流程中,除业务用户验证服务外,都具有云服务支持。此外,本项功能同样能够防止一定的高频访问流量攻击。
小结
本文从防护流量攻击以及防护资源窃取的角度出发,介绍HTTP HEADER 鉴权、IP鉴权、URL鉴权、视频加密等方法,在生产应用中可以提供参考。如有错误望不吝赐教。