zoukankan      html  css  js  c++  java
  • 七牛视频防盗链处理

    背景

    公司在做付费课程,视频教学为主,需要对视频链接作防盗链处理。

    REFERER

    HTTP referer 是 header 上的一个属性。当浏览器向服务器发起请求时,一般会带上Referer,告诉服务器我是从哪个页面链接过来的。

    七牛在融合 CDN -> 域名管理 -> 高级配置里有一个域名防盗链选项。

    域名防盗链

    配置好之后就可以限制链接只能从配置好的白名单域名进行访问,简单的防御了盗链。但是HTTP header 是可以被伪造的,经测试,直接用 postman 加个 Referer 就可以绕过了。

    私有空间

    七牛云提供了私有空间,空间内的文件对象都要获得拥有者的授权才能进行访问,并且可以设置链接的有效时间,超过时长后自动失效(视频会有缓存,清空缓存之前视频仍然有效)。

    如何创建私有空间的访问链接,下面是 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);
    

    注意

    1. 测试域名不能用于私有空间。
    2. 自定义域名必须开启回源鉴权。
    3. 播放 hls 文件需要使用 pm3u8 服务。

    详情可见这里:私有空间的注意事项

    PM3U8

    视频切片(七牛视频切片)后放在私有仓库时,获取单段视频的链接也需要带上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 的。

    image.png

    总结

    使用 REFERER + 私有空间 已经可以解决盗链问题了,但是如果视频被下载仍然是个问题。需要对视频做加密处理,但是即使做了加密处理,也阻止不了录屏。完全杜绝视频泄露是很难的,或者我们可以采取其他方式加大盗用的成本,比如在视频里加上水印或者观看者ID,甚至让水印或者观看者ID在视频里四处游走(影响观看体验)。

    博客首发地址:https://www.jianshu.com/u/13cd86311525

  • 相关阅读:
    第一篇:白话tornado源码之一个脚本引发的血案
    第二篇:白话tornado源码之待请求阶段
    Python 面向对象(初级篇)
    python 面向对象(进阶篇)
    Csharp启动exe文件
    UNIX时间戳
    JS日期格式化代码
    Android之什么是Activity和常用的ADB命令以及Android项目结构的认识
    thread同步测试
    Fluent NHibernate使用小结:(1)通用配置文件创建方法
  • 原文地址:https://www.cnblogs.com/chaohangz/p/9895796.html
Copyright © 2011-2022 走看看