基本介绍
如何保障视频内容的安全, 不被盗链, 非法下载和传播, 阿里云视频点播已经有一套完善的机制保障视频的安全播放:
更多详细内容查看点播内容安全播放 https://www.atatech.org/articles/111909 ,H5 的 Aliplayer 对于上面的安全机制都是支持的, 但是也有一些限制.
https://www.atatech.org/articles/129114#1 访问限制
访问限制主要是阿里云视频云提供的安全访问能力, 只需要云端配置, 播放器无需做额外的事情, 并且拒绝访问的原因会通过 "X-Tengine-Error"Response Header 返回, Http 请求的错误的 Code 为 403.
开启 Referer 防盗链后, 如果 Referer Header 的值不是控制台设置的值时, 返回 "denied by Referer ACL" 错误
Referer 首部包含了当前请求页面的来源页面的地址, 即表示当前页面是通过此来源页面里的链接进入的, 还要注意以下两种情况下, Referer 不会被发送:
来源页面采用的协议为表示本地文件的 "file" 或者 "data" URI;
当前请求页面采用的是非安全协议, 而来源页面采用的是安全协议(HTTPS).
比如下面视频页面直接'file'的方式打开, 是可以播放的:
要避免上面的两个遗漏, 在启用 Referer 防盗链后, 不要忘记禁止允许空的 Referer, 为了更加的安全, 切记去掉允许空 Referer 的选择:
https://www.atatech.org/articles/129114#2 播放中心鉴权
播放地址长期有效会更容易的非法扩散传播, 视频点播提供的 URL 鉴权可通过生成动态的加密 URL(包含权限验证, 过期时效等信息)来区分合法请求, 以达到保护视频资源的目的. 当然用户首先得去点播服务开启 URL 鉴权, 鉴权的地址格式:
http://qt1.alivecdn.com/olympic/cctv6d.flv?auth_key=1531045067-0-0-86c4b15261ea820b834c111b601acda3
播放域名开启鉴权后会在视频 URL 地址后添加 auth_key 的 query string 参数, 如果缺少 auth_key 参数或有效期过期, 在访问视频地址时会抛 403 错误, 比如:
Aliplayer 提供了 authTimeout 参数用户指定鉴权的有效期, 默认值为 2 小时, 用户可以修改这个值, 但是不要修改的太小, 避免在播放过程中过期, 而导致播放失败.
- var player = new Aliplayer({
- id: "player-con",
- source: "//common.qupai.me/player/qupai.mp4",
- width: "100%",
- height: "500px",
- autoplay: true,
- vid:"6bd7ad2a482e4829b726819d2168621d",
- playauth : "eyJTZWN1cml0eVRva2VuIjoiQ0FJUzN3SjFxNkZ0NUI",
- authTimeout:3600 // 单位毫秒
- }, function (player) {
- console.log("播放器创建成功");
- });
https://www.atatech.org/articles/129114#3 业务方二次鉴权
阿里云的播放中心鉴权, 在有效期内视频地址都可以被使用, 并且 Referer 容易被伪造, 如果能够加上业务方的一些信息做业务方的二次鉴权, 对盗链的非法请求的判断更加精确, 过程如下图:
二次鉴权是指点播 CDN 将用户的请求透传到客户的鉴权中心, 由客户自己判定该请求是否合法, CDN 根据客户的判断结果执行相应动作: 允许或拒绝访问.
二次鉴权需要客户自己开发和部署鉴权中心, 该鉴权中心的域名如果同时在 CDN 上面加速, 可以按照一定规则缓存客户的鉴权结果, 以减轻客户鉴权中心的压力. 点播 CDN 会默将把用户请求的 headers 和 request_uri 透传到客户自定义的鉴权中心, 并根据鉴权中心返回的结果执行相应的动作.
Aliplayer 会把用户播放域名下面的 cookie 值, 透传到客户的鉴权中心, 由客户自己判定该请求是否合法.
启用 Cookie 的 Secure 和 HttpOnly 标记, 让 cookie 更安全. 标记为 Secure 的 Cookie 只应通过被 HTTPS 协议加密过的请求发送给服务端, 从 Chrome 52 和 Firefox 52 开始, 不安全的站点 (Http:) 无法使用 Cookie 的 Secure 标记. 标记为 HttpOnly 的 Cookie, 通过 JavaScript 的 Document.cookieAPI 无法访问带有 HttpOnly 标记的 Cookie, 它们只应该发送给服务端, 避免跨域脚本 (XSS) 攻击.
https://www.atatech.org/articles/129114#4 视频加密
防盗链的安全机制能有效保障用户的合法访问, 但是在用户合法获取播放地址, 将视频本地, 进而实现二次分发. 因此, 防盗链方案对于视频版权保护是远远不够的. 无法保护视频文件的内容. Aliplayer 支持了三种内容的加密方式: 阿里云加密, HLS 的标准加密, 标准 DRM, 浏览器支持情况:
加密方式 | PC 端 | 移动端 |
Chrome、Safari、Firefox、 IE>11、Edge | iOS 不支持 Android 部分支持,依赖于浏览器是否支持 MSE | |
Chrome、Safari、Firefox、 IE>11、Edge | 全支持 | |
Google Widevine: Chrome、Firefox 支持 微软 Playready:IE>11、Edge 支持 | iOS 不支持 Chrome for Android 部分支持,依赖 Android 设备 |
阿里云加密和标准 DRM 的安全性差不多, 比 HLS 的标准加密方式的安全性高, 但是如果需要考虑移动端, 当前只能选择 HLS 的标准加密方式.
视频加密的详细介绍参考: 点播内容安全机制 https://www.atatech.org/articles/111909
Aliplayer 播放加密视频和普通方式没有区别, 不用做多余属性的设置, 只需要通过 videoId 的播放方式集成播放器播放视频, 比如:
- var player = new Aliplayer({
- id: "player-con",
- source: "//common.qupai.me/player/qupai.mp4",
- width: "100%",
- height: "500px",
- autoplay: true,
- vid:"6bd7ad2a482e4829b726819d2168621d",
- playauth : "eyJTZWN1cml0eVRva2VuIjoiQ0FJUzN3SjFxNkZ0NUI"
- }, function (player) {
- console.log("播放器创建成功");
- });
https://www.atatech.org/articles/129114#5 私有加密防调试
视频是私有加密的时候不希望用户调试我们的核心代码, Aliplayer 安全加固添加了防调试的代码, 主要包含两个阶段的: JS 加载解析的时候和执行到核心方法时候 .
如果用户打开开发者工具, 打开页面时会停止加载变为一个空白页面, 如下图:
注意: 关闭开发者工具页面还是刷新不出来的, 需要在新的 tab 里重新打开页面
https://www.atatech.org/articles/129114#6 如何启用
通过引入 Aliplayer 提供的 JavaScript 文件开启防调试模式, 考虑到在开发过程中的调式, 用户可以在发布的产品中才引入, JavaScript 文件的地址:
<script src="https://g.alicdn.com/de/prismplayer/2.8.0/hls/aliplayer-vod-anti-min.js"></script>
来源: https://yq.aliyun.com/articles/687094