终极指南:一文教你锁住视频,防盗下载!(极简思路版)

省流:
视频加密方面:建议在线视频采用hls标准加密配合标准加密改写,加密视频,被下载了也无法解密播放。
安全性方面:Referer防盗链 配合 URL鉴权 验证请求有效性(注:一定要开启http响应头跨域)
建议由简入繁:顺序是配置 Referer 防盗链 --》URL鉴权 --》 hls标准加密 --》 hls标准加密配合标准加密改写
Referer 防盗链
通过检查 HTTP Referer 头部信息,限制只有特定域名的请求可以访问视频资源。
某些浏览器插件下载视频会通过捕获hls视频的m3u8文件(相当于播放列表)解析文件去向服务器发出请求,获取到视频文件之后利用浏览器缓存机制获取缓存从而实现下载效果。如某CooCut。。。
这样,即使获取到视频地址,也无法在未授权的域名上播放。
URL鉴权
未加鉴权前(m3u8文件中的播放地址):79**********11e4e*********91671a9937867d922b40-od-S***********0-00001.ts
加了鉴权后:79**********11e4e*********91671a9937867d922b40-od-S***0-00001.ts?auth_key=1722*****ull-null-d2cd8*************fbd2704821** 能够有效防止一些用户知道播放地址之后直接通过播放地址下载视频,这样每次请求都是需要验证的
但是有些浏览器插件通过本地客户端发出请求,相当于利用你的电脑发出请求这样可以完美绕过Referer 防盗链 和URL鉴权。绕过验证之后,获取本地客户端保存的视频缓存从而下载视频
以上两种方案,只能防主小白用户
hls标准加密配合标准加密改写
配置之后无论如何下载用户都只能得到加密后的视频,需要在官方客户端实时加密和解密。
先说加密思路 再说解密思路 再说如何对接标准加密改写
加密思路
1、将原生的视频上传到云后,云会生成视频id,拿到视频id存起来;
2、生成加密和解密视频需要的秘钥,保存解密密钥(后面可以通过解密密钥得到加密密钥)
3、提交hls标准加密任务。需要的分别是:配置了加密服务的转码模版、存的视频id、EDK秘钥(存的解密密钥)、解密服务url(这个服务需要自己搭建,其实就是拿到EDK秘钥解密密钥之后,调用获取加密密钥接口,获取到加密密钥,因为是用这个加密密钥加密视频的所以同样也能用于后面的解密)。
解密思路(使用支持hls标准加密的播放器)
1、获取播放凭证
2、将凭证给播放器,会获取到视频的m3u8文件。文件中包含了解密地址(也就是你的解密服务的接口地址),播放器会访问这个地址去获取解密密钥(要就是刚才说的起初加密视频的加密密钥DK,同样能用来解密。只不过在使用加密密钥DK加密视频之后密钥就被丢弃了,要使用EDK密钥来获取加密密钥DK,从而解密视频)
这样播放器就能使用加密密钥DK去解密视频资源了
传统浏览器插件通过本地客户端发出请求,绕过安全认知获取到的视频资源,只能是加密后的。因为其实就是在下载视频资源的缓存,但是缓存是存储在硬盘中的。我们此处解密后的视频是存储在内存中,不会被获取到解密后的缓存。
标准加密改写思路
标准加密改写其实就是给每次播放器去调用解密服务的请求添加一个认证。类似于加了一个token。你可以自定义这个认证逻辑。
所以你需要在获取播放凭证的时候生成一个解密服务的 token出来。把这个token填写给支持hls标准加密的播放器。这个播放器就能在调用解密服务地址的时候,顺道把解密token带过去验证了。