全部產品
Search
文件中心

:使用防盜鏈策略避免非法流量盜用

更新時間:Aug 02, 2024

通過在OSS中配置基於請求標題Referer的訪問規則,可以阻止某些Referer訪問您的OSS檔案,從而防止其他網站盜用您的檔案,並避免由此引起的不必要的流量費用增加。

使用情境

  • 禁止未經授權的使用:保護圖片、視頻、音頻等敏感或有著作權的檔案不被未經授權的網站下載或訪問。

  • 節省頻寬和資源消耗:通過防止盜鏈,避免其他網站直接連結到自己的資源檔,減少了非法訪問帶來的頻寬消耗和伺服器資源壓力。

  • 付費內容保護:在提供付費內容的情境中,防盜鏈可以確保只有購買者才能訪問和使用付費內容,防止非法傳播和盜版。

  • 夥伴授權訪問:某些情況下,需要與夥伴網站共用資源或資料,通過防盜鏈可以限制只有精選合作夥伴可以訪問和使用共用資源。

基本概念

  • 盜鏈:是指在一個網頁內,以連結的形式嵌入另一個網頁的內容,從而擷取他人的資源而不經過授權。

  • 防盜鏈:在OSS中,是指通過配置Referer來防止其他非法網站或使用者盜用您的OSS資源。

  • Referer:HTTP要求標頭部中的一個欄位,包含了請求的來源頁面的URL。通過檢查Referer頭部的值,可以判斷請求的來源頁面。Referer檢查通常用於以下兩種情境:防盜鏈。例如,網站訪問自己的圖片伺服器,圖片伺服器通過Referer來判斷是否為自己的網域名稱,如果是就繼續訪問,不是則攔截;資料統計。例如,統計使用者是從哪個連結過來訪問的。

  • 空Referer:HTTP請求中Referer頭部的內容為空白,或者HTTP請求中不包含Referer頭部。如果存在以下兩種情況,則Referer為空白:當請求並不是由連結觸發產生。例如直接通過瀏覽器輸入地址開啟頁面;從HTTPS頁面上的連結訪問到非加密的HTTP頁面時,在HTTP頁面上是檢查不到Referer的。

  • 白名單:一種限制只允許特定來源訪問資源的列表。在防盜鏈中,可以配置一個白名單來定義允許訪問資源的Referer來源。

  • 黑名單:一種限制阻止特定來源訪問資源的列表。在防盜鏈中,可以配置一個黑名單來定義阻止訪問資源的Referer來源。

  • QueryString:HTTP請求中的一部分,用於在URL中傳遞參數資訊。它通常包含在URL的問號後面,以索引值對的形式表示。

功能原理

當瀏覽器向OSS發送請求時,請求標題中將包含Referer,用於告知OSS該請求的頁面連結來源。如果配置了防盜鏈,OSS將根據請求的Referer與配置的Referer規則來判斷是否允許此請求:

  • 如果瀏覽器附帶的Referer與黑名單Referer匹配,或與白名單Referer不匹配,則OSS將拒絕該請求的訪問。

  • 如果瀏覽器附帶的Referer與白名單Referer匹配,則OSS將允許該請求的訪問。

例如,某個Bucket配置了白名單Referer為https://10.10.10.10

  • 使用者A在https://10.10.10.10嵌入test.jpg圖片,當瀏覽器請求訪問此圖片時會帶上https://10.10.10.10的Referer,此情境下OSS將允許該請求的訪問。

  • 使用者B盜用了test.jpg的圖片連結並將其嵌入https://192.168.0.0,當瀏覽器請求訪問此圖片時會帶上https://192.168.0.0的Referer,此情境下OSS將拒絕該請求的訪問。

判斷邏輯

開啟防盜鏈後,OSS會根據請求Header中的Referer地址判斷訪問來源的方式,確定是否允許當前請求。具體判斷邏輯如下。

  1. 判斷請求Referer是否為空白。

    • 如果請求Referer為空白,則查看是否允許空Referer。

      • 如果允許空Referer,則請求被允許。

      • 如果不允許空Referer,且白名單Referer列表為空白,則請求被允許。

      • 如果不允許空Referer,且白名單Referer列表不為空白,則請求被拒絕。

    • 如果請求Referer不為空白,則執行步驟2

  2. 判斷黑名單Referer列表是否為空白。

    • 如果黑名單Referer列表為空白,且白名單Referer列表為空白,則請求被允許。

    • 如果黑名單Referer列表為空白,且白名單Referer列表不為空白,則跳過步驟3,執行步驟4

    • 如果黑名單Referer列表不為空白,則執行步驟3

  3. 遍曆黑名單Referer列表。

    • 如果黑名單Referer列表存在匹配條目,則請求被拒絕。

    • 如果黑名單Referer列表不存在匹配條目,則執行步驟4

  4. 遍曆白名單Referer列表。

    • 如果白名單Referer列表存在匹配條目,則請求被允許。

    • 如果白名單Referer列表不存在匹配條目,則請求被拒絕。

注意事項

  • 僅支援針對整個Bucket設定防盜鏈,不支援為Bucket的某一個檔案或檔案夾設定防盜鏈。

  • 僅當通過簽名URL訪問Object(調用GetObject介面)或者匿名訪問Object時,OSS會進行防盜鏈驗證。

  • 當請求的Header中包含Authorization欄位,OSS不會進行防盜鏈驗證。

  • 一個Bucket可以支援多個Referer參數,這些參數之間通過,分隔。

  • 為Bucket開啟防盜鏈後,所有許可權(private、public-read、public-read-write)的Bucket都會檢查Referer欄位。

  • 為Bucket開啟防盜鏈後,使用OSS的Bucket網域名稱或自訂網域名預覽MP4檔案時,必須在Referer白名單中添加相應的網域名稱,並允許空Referer。因為瀏覽器會發送一個帶Referer和一個不帶Referer的請求,兩個請求都成功才能正常播放視頻。預覽非MP4檔案時,只需允許空Referer。

錯誤碼

相關文檔