Web视频播放与数据安全
HTML5 的 video 标签的安全性
H5的video/audio标签可以⽅便的播放⾳视频,只需要把资源的链接设置为src属性即可。但是这种⽅式也把资源的链接暴露了出来,⽤户可以随意下载、播放⾳视频数据。那么如何提⾼媒体资源的安全性呢?
保证媒体资源的数据安全
Referer 防盗链
浏览器内部去下载视频数据,归根到底是发起了⼀个HTTP请求,那么就可以围绕HTTP协议请求做⼀些功课。
Referer 是HTTP请求 header 的⼀部分,浏览器向web服务器发送请求的时候会在header中带上当前的地址,那么服务端可以通过⿊⽩名
单控制哪些地址的⽹⻚可以播放这个视频。⽬前云存储服务商⼤部分都⽀referer防盗链功能。
但是客户端可以伪造这个值,所以Referer不是绝对可信的,只能作为辅助⼿段。
Blob URL
通俗的讲 Blob URL 也是⼀种URL,和⼀般的http开头的URL相⽐,它是blob:// 开头的。它是浏览器维护在内存的⼀堆⼆进制数据,是⼀
种本地的URL。即便⽤户拿到了这个URL,也没办法下载和播放。
- 关于Blob URL的API
// 创建
objectURL = URL.createObjectURL(object); // 参数类型为 File、Blob 或者 MediaSource
// 回收
URL.revokeObjectURL(objectURL);
有了Blob URL,就可以通过HTTP先把视频下载到浏览器本地,然后转为Blob URL使⽤。然⽽视频下载的过程依然会暴露视频⽂件的真实地址,那么如何进⼀步提⾼安全性呢?
视频⽂件加密
如果视频⽂件是加密存储的,那么就算有⼈下载了视频,甚⾄攻⼊服务器拿到了视频⽂件,⽆法正常播放也是徒劳的。
视频⽂件加密算法选择
加密算法主要分为两⼤类,⼀种是可逆加密算法、⼀种是不可逆加密算法,可不可逆的区别是能否从加密后的密⽂还原成明⽂,能还原的就是可逆算法,否则就是不可逆。⽽对于可逆性算法⼜分为对称性加密和⾮对称性加密,区别的关键在于加密和解密的密钥是否相同。
- 哈希/摘要
常⽤的哈希算法有MD5、SHA系列等等,特点是不可逆、数据完整性敏感 - 对称性加密
主要有DES、3DES、AES等标准,AES是DES的替代,现在常⽤的是AES。 - ⾮对称性加密
主要使⽤的是RSA,有两种密钥,公钥是加密⽤的,私钥是解密⽤的。
对于加密⼤的⽂件⽽⾔适合选择AES加密。
AES 加密
- 密钥
AES128、AES192、AES256 , 数字对应密钥的⻓度(bit)
密钥可随机⽣成,解密时必须使⽤加密的密钥才能成功解密 - 填充
填充⽅式是AES的⼀个重要参数,加密和解密时填充⽅式必须⼀致。
要想了解填充的概念,我们先要了解AES的分组加密特性.
先把全量的明⽂分成⼀个个独⽴的明⽂块,⼀块的⻓度和密钥的⻓度⼀致。再