七牛視訊防盜鏈處理
背景
公司在做付費課程,視訊教學為主,需要對視訊連結作防盜鏈處理。
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);
注意
- 測試域名不能用於私有空間。
- 自定義域名必須開啟回源鑑權。
- 播放 hls 檔案需要使用 pm3u8 服務。
詳情可見這裡: ofollow,noindex" target="_blank">私有空間的注意事項 。
總結
使用 REFERER + 私有空間 已經可以解決盜鏈問題了,但是如果視訊被下載仍然是個問題。需要對視訊做加密處理,但是即使做了加密處理,也阻止不了錄屏。完全杜絕視訊洩露是很難的,或者我們可以採取其他方式加大盜用的成本,比如在視訊里加上水印或者觀看者ID,甚至讓水印或者觀看者ID在視訊裡四處遊走(影響觀看體驗)。