公司在作付費課程,視頻教學爲主,須要對視頻連接做防盜鏈處理。javascript
HTTP referer 是 header 上的一個屬性。當瀏覽器向服務器發起請求時,通常會帶上Referer,告訴服務器我是從哪一個頁面連接過來的。java
七牛在融合 CDN -> 域名管理 -> 高級配置裏有一個域名防盜鏈選項。瀏覽器
配置好以後就能夠限制連接只能從配置好的白名單域名進行訪問,簡單的防護了盜鏈。可是HTTP header 是能夠被僞造的,經測試,直接用 postman 加個 Referer 就能夠繞過了。緩存
七牛雲提供了私有空間,空間內的文件對象都要得到擁有者的受權才能進行訪問,而且能夠設置連接的有效時間,超過期長後自動失效(視頻會有緩存,清空緩存以前視頻仍然有效)。服務器
如何建立私有空間的訪問連接,下面是 Node.js SDK 的一段示例代碼,其餘語言能夠去官網查看。post
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);
詳情可見這裏:私有空間的注意事項。測試
視頻切片(七牛視頻切片)後放在私有倉庫時,獲取單段視頻的連接也須要帶上token。七牛提供了 pm3u8服務 ,對 m3u8文件中的 ts 資源進行批量下載受權。經過將 ts 資源的 url 改寫成私有 url,以臨時獲取訪問權限。加密
有個須要注意的地方是,作簽名處理時,要對整個連接作簽名,好比 https://test.com/12354.m3u8?pm3u8/0
。url
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
的。spa
使用 REFERER + 私有空間 已經能夠解決盜鏈問題了,可是若是視頻被下載仍然是個問題。須要對視頻作加密處理,可是即便作了加密處理,也阻止不了錄屏。徹底杜絕視頻泄露是很難的,或者咱們能夠採起其餘方式加大盜用的成本,好比在視頻里加上水印或者觀看者ID,甚至讓水印或者觀看者ID在視頻裏四處遊走(影響觀看體驗)。