公司在作付费课程,视频教学为主,须要对视频连接做防盗链处理。javascript
HTTP referer 是 header 上的一个属性。当浏览器向服务器发起请求时,通常会带上Referer,告诉服务器我是从哪一个页面连接过来的。java
七牛在融合 CDN -> 域名管理 -> 高级配置里有一个域名防盗链选项。浏览器
配置好以后就能够限制连接只能从配置好的白名单域名进行访问,简单的防护了盗链。可是HTTP header 是能够被伪造的,经测试,直接用 postman 加个 Referer 就能够绕过了。缓存
七牛云提供了私有空间,空间内的文件对象都要得到拥有者的受权才能进行访问,而且能够设置连接的有效时间,超过期长后自动失效(视频会有缓存,清空缓存以前视频仍然有效)。bash
如何建立私有空间的访问连接,下面是 Node.js SDK 的一段示例代码,其余语言能够去官网查看。服务器
var mac = new qiniu.auth.digest.Mac(accessKey, secretKey);
var config = new qiniu.conf.Config();
var bucketManager = new qiniu.rs.BucketManager(mac, config);
var privateBucketDomain = 'http://if-pri.qiniudn.com';
var deadline = parseInt(Date.now() / 1000) + 3600; // 1小时过时
var privateDownloadUrl = bucketManager.privateDownloadUrl(privateBucketDomain, key, deadline);
复制代码
详情可见这里:私有空间的注意事项。post
视频切片(七牛视频切片)后放在私有仓库时,获取单段视频的连接也须要带上token。七牛提供了 pm3u8服务 ,对 m3u8文件中的 ts 资源进行批量下载受权。经过将 ts 资源的 url 改写成私有 url,以临时获取访问权限。测试
有个须要注意的地方是,作签名处理时,要对整个连接作签名,好比 https://test.com/12354.m3u8?pm3u8/0
。加密
var privateBucketDomain = 'http://if-pri.qiniudn.com';
var deadline = parseInt(Date.now() / 1000) + 3600; // 1小时过时
var key = 12354.m3u8?pm3u8/0; // pm3u8 参数和 url 一块儿作签名
var privateDownloadUrl = bucketManager.privateDownloadUrl(privateBucketDomain, key, deadline);
复制代码
还有个须要注意的地方是,虽然官方文档有一句这种提示,但和七牛沟通后的结果是,pm3u8 服务也是支持 https
的。url
使用 REFERER + 私有空间 已经能够解决盗链问题了,可是若是视频被下载仍然是个问题。须要对视频作加密处理,可是即便作了加密处理,也阻止不了录屏。彻底杜绝视频泄露是很难的,或者咱们能够采起其余方式加大盗用的成本,好比在视频里加上水印或者观看者ID,甚至让水印或者观看者ID在视频里四处游走(影响观看体验)。