七牛視頻防盜鏈處理

背景

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章