七牛視頻防盜鏈處理


背景

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM