七牛視頻防盜鏈處理

背景

公司在作付費課程,視頻教學爲主,須要對視頻連接做防盜鏈處理。javascript

REFERER

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);

注意

  1. 測試域名不能用於私有空間。
  2. 自定義域名必須開啓回源鑑權。
  3. 播放 hls 文件須要使用 pm3u8 服務。

詳情可見這裏:私有空間的注意事項測試

PM3U8

視頻切片(七牛視頻切片)後放在私有倉庫時,獲取單段視頻的連接也須要帶上token。七牛提供了 pm3u8服務 ,對 m3u8文件中的 ts 資源進行批量下載受權。經過將 ts 資源的 url 改寫成私有 url,以臨時獲取訪問權限。加密

有個須要注意的地方是,作簽名處理時,要對整個連接作簽名,好比 https://test.com/12354.m3u8?pm3u8/0url

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

image.png

總結

使用 REFERER + 私有空間 已經能夠解決盜鏈問題了,可是若是視頻被下載仍然是個問題。須要對視頻作加密處理,可是即便作了加密處理,也阻止不了錄屏。徹底杜絕視頻泄露是很難的,或者咱們能夠採起其餘方式加大盜用的成本,好比在視頻里加上水印或者觀看者ID,甚至讓水印或者觀看者ID在視頻裏四處遊走(影響觀看體驗)。

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

相關文章
相關標籤/搜索