摘要: 如何保障视频内容的安全,不被盗链、非法下载和传播,是困扰众多企业已久的问题,特别是独播剧、在线教育、财经金融、行业培训等在线版权视频领域尤为迫切,处理不好会造成极为严重的经济损失,甚至法律风险。阿里云视频点播提供了完善的内容安全保护机制,可以满足不同业务场景的安全需求。
1. 概述
如何保障视频内容的安全,不被盗链、非法下载和传播,是困扰众多企业已久的问题,特别是独播剧、在线教育、财经金融、行业培训等在线版权视频领域尤为迫切,处理不好会造成极为严重的经济损失,甚至法律风险。
阿里云视频点播提供了完善的内容安全保护机制,可以满足不同业务场景的安全需求。
![bbee2195b50ff53084572c325db1f148f2680b1d.png](https://static.studygolang.com/180703/ea338f21b70ee381d249bfef785ea8d3.png)
2. 访问限制
访问限制是在云端配置视频资源的访问策略,达到基本的保护目的,主要手段有:
Referer、IP和UA(User-Agent)的黑白名单
一定周期内,URL的访问次数限制、独立IP数限制
2.1 Referer黑白名单
基于 HTTP 协议支持的 Referer机制,通过 Referer跟踪来源,对来源进行识别和判断,用户可配置访问的 Referer 黑、白名单(二者互斥)来限制视频资源被访问的情况。
支持黑名单和白名单两种模式,访客对资源发起请求后,请求到达CDN 节点,节点会根据用户预设的防盗 链黑名单或白名单进行过滤,符合规则可顺利请求到视频数据;若不符合,请求会被拒绝,并返回403响应 码。
配置后会自动添加泛域名支持,例如填写a.com,最终配置生效的是*.a.com,所有子级域名都会生效。
由于移动端一般拿不到Referer,当前默认支持空Referer访问,可选择关闭。
示例
设置点播域名 vod-test1.cn-shanghai.aliyuncs.com 的Referer白名单为 aliyun.com,且不允许空Referer访问,请求 数据:
curl -i 'http://vod-test1.cn-shanghai.aliyuncs.com/sv/5101d1f8-1643f9ab241/5101d1f8-1643f9ab241.mp4'
返回
![0c0a2d86cc334f330704f83fd5ed994000d770b1.png](https://static.studygolang.com/180703/0810804e4dc0514c25bd904eee624412.png)
当请求带上允许的referer后即正常返回:
curl -i 'http://vod-test1.cn-shanghai.aliyuncs.com/sv/5101d1f8-1643f9ab241/5101d1f8-1643f9ab241.mp4' \
-H 'Referer: http://www.aliyun.com'
2.2 UA黑白名单
UA(User-Agent)是一个特殊字符串头,帮助服务端识别用户使用的操作系统及版本、CPU类型、浏览器及版本、 浏览器渲染引擎&语言和插件等。可通过UA黑白名单来限制特定浏览器或终端的访问。
如PC端IE9浏览器:
UserAgent:Mozilla/5.0(compatible;MSIE9.0;WindowsNT6.1;Trident/5.0;
可模拟HTTP请求验证:
curl -i 'http://vod-test1.cn-shanghai.aliyuncs.com/sv/5101d1f8-1643f9ab241/5101d1f8-1643f9ab241.mp4' \
-H 'User-Agent: iPhone OS;MI 5'
2.3 IP黑白名单
视频点播支持配置IP黑名单或白名单,拒绝或只允许特定IP的访问。
支持IP列表添加,并支持添加IP网段,例如127.0.0.1/24。
网段127.0.0.1/24,24表示采用子网掩码中的前24位为有效位,即用32-24=8bit来表示主机号,该子网可以容纳2^8 - 2 = 254 台主机,故可表示IP网段范围:127.0.0.1~127.0.0.255。
可选择优先使用 remote_addr 或 X-Forwarded-For(XFF) 作为请求端IP,或者同时匹配。
2.4 访问次数和独立IP数限制
点播服务可限制媒体资源在一定时间周期内(如1天)的最大访问次数和最大独立IP数,核心原理是所有请求先到中心化的访问计数服务进行验证,判断是否超过预设的阈值,若超过则拒绝服务,返回HTTP 403。
该限制为URL(包括文件地址和签名信息)维度而非文件维度,但可配置忽略URL中的部分参数;限制的阈 值到域名粒度,可单独设置。
访问计数服务是多区域部署的中心化服务,一个URL只能被调度到其中一个区域,以保证中心化计数。
CDN边缘节点收到请求后会访问中心化计数服务进行计数和验证。
2.5 小结
访问限制的使用门槛很低,只需简单配置即可使用,能起到一定的保护作用,特别是Web端。
Referer和UA都是基于HTTP Header,容易被伪造,安全性低。
IP黑白名单机制和访问数限制,无法实现内容分发给大量C端用户,不适合广泛的内容消费场景,且后者在 阈值范围内也可能被非法访问。
3. 播放中心鉴权
播放地址若固定不变会带来持久的非法扩散传播,且无法有效遏制,视频点播提供的URL鉴权可通过生成动态的加密URL(包含权限验证、过期时效等信息)来区分合法请求,以达到保护视频资源的目的。
开启URL鉴权后,点播的播放器SDK、获取播放地址的API/SDK都会自动生成带时效的播放URL;如需要自己生成鉴权的动态URL,则可使用下述 鉴权 法。
开启URL鉴权后,所有媒体资源,包括视频、音频、封面、截图等地址都会进行鉴权。
鉴权Key的设置是以域名为粒度,且存于服务端以确保安全;支持主、备Key平滑切换,若更换主Key,可使用备Key生成播放地址,以做为更换的桥接,实现交替更新。
鉴权方法
鉴权URL构成
http://DomainName/Filename?auth_key=timestamp-rand-uid-md5hash
鉴权URL由播放文件地址+验证串构成,验证串是根据鉴权key+过期时间通过md5算法计算得出,且具有时效性, 默认为3600秒(可后台配置)的有效时间,可在生成播放地址或获取地址时设置过期时间;若地址过期则访问时 CDN会返回HTTP 403。
动态地址示例
http://vod.example.com/video/aliyun-sample.mp4?auth_key=1500523200-0-0-80cd3862d699b7118eed99103f2a3a4f
示例中的auth_key参数值前缀1500523200(时间为2017-07-20 12:00:00),表示该地址会在2017-07-20 13:00:00过期。
更多信息可参考 阿里云视频点播-URL鉴权。
4. 业务方二次鉴权
播放中心鉴权使用了阿里云的默认鉴权中心,但由于没有客户业务请求信息的输入,对盗链等非法请求的判断还比较单一,使用二次鉴权会更加精准。
二次鉴权是指点播CDN将用户的请求透传到客户的鉴权中心,由客户自己判定该请求是否合法,CDN根据 客户的判断结果执行相应动作:允许或拒绝访问。
二次鉴权需要客户自己开发和部署鉴权中心,该鉴权中心的域名如果同时在 CDN上面加速,可以按照一定 规则缓存客户的鉴权结果,以减轻客户鉴权中心的压力。点播CDN会默将把用户请求的 headers 和 request_uri 透传到客户自定义的鉴权中心,并根据鉴权中心返回的结果执行相应的动作。过程如下图:
![7f79da5eb184104b90237d9972cc2e0b4c2290c0.png](https://static.studygolang.com/180703/8ec21f75f393b21d66e90e714c96811f.png)
如业务方可将其用户的登录Cookie或UUID等信息隐藏于播放请求中,进而透传到自己的鉴权中心以判定是否为合法用户。
5. 视频加密
防盗链安全机制能有效保障用户的合法访问,但对于付费观看视频的场景,用户只需通过一次付费行为拿到视频合 法的防盗链播放URL,将视频下载到本地,进而实现二次分发。因此,防盗链方案对于视频版权保护是远远不够的。视频文件一旦泄露,会给付费观看模式造成十分严重的经济损失。
阿里云视频加密是对视频数据加密,即使下载到本地,视频本身也是被加密的,无法恶意二次分发,可有效防止视频泄露和盗链问题。
5.1 阿里云视频加密
阿里云视频加密采用私有的加密算法和安全传输机制,提供云端一体的视频安全方案,核心部分包括 “加密转码” 和 “解密播放”。
核心优势:
每个媒体文件拥有独立的加密钥匙,能有效避免采用单一密钥时,一个密钥的泄露引起大范围的安全问题。
提供信封加密机制“密文Key+明文Key”,仅密文Key入库,明文Key不落存储,所有过程只在内存中,用完 即销毁。
提供安全的播放器内核SDK,涵盖iOS/Android/Flash多平台,自动对加密内容进行解密播放;H5播放器不支持加密视频的播放。
播放器和云端使用私有加密协议进行密文传输,不传输明文Key,有效防止密钥被窃取。
提供安全下载,缓存到本地的视频会再次加密,在确保无网离线播放前提下,防止视频被拷贝窃取。
注意:阿里云视频加密仅支持输出HLS格式,且只能使用阿里云播放器。 更多信息参考 阿里云-视频加密
5.2 HLS标准加密
HLS标准加密支持 HTTP Live Streaming 中规定的通用加密方案,使用AES-128对视频内容本身进行加密,同时能 支持所有的HLS播放器,用户可选择使用自研或开源的播放器。相比私有加密方案,灵活性更好,但使用门槛更 高、安全性更低:
用户需搭建密钥管理服务,提供密钥生成(用于转码时对视频内容进行加密)和解密服务(用于播放时获取 解密密钥),也可基于 阿里云KMS 进行封装。
用户需提供令牌颁发服务,用于验证播放端的身份,避免解密密钥被非法获取,此处为关键点,处理不好会千里之堤溃于蚁穴。
播放器和云端传输明文Key,容易被窃取。
更多信息参考 阿里云-HLS标准加密
5.3 小结
视频加密方案各有优劣,一般来说,越是标准、通用,灵活性越高,但安全性越低,选择哪种方案取决于自己的业务场景,有所取舍:
安全等级:阿里云视频加密 > HLS标准加密
阿里云视频加密安全性明显高于HLS标准加密。
易用性:阿里云视频加密 > HLS标准加密
阿里云视频加密提供云端一体解决方案,只需简单配置并接入阿里云播放器即可无缝集成加密能力;HLS标准加密需自建密钥管理和令牌颁发服务。
通用性:HLS标准加密 > 阿里云视频加密
HLS标准加密可适配所有M3U8播放场景;阿里云视频加密仅支持阿里云播放器 (Android/iOS/Flash)。
使用费用:阿里云视频加密 = HLS标准加密
阿里云视频加密和HLS标准加密都可免费使用。
iOS/Android/Flash使用阿里云视频加密或HLS标准加密会有很好的安全性;但由于H5端为明文,要保证更高的安全性首选商业DRM(Chrome等浏览器的原生支持)。
原文链接:http://click.aliyun.com/m/1000004537/
有疑问加站长微信联系(非本文作者)