通過在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地址判斷訪問來源的方式,確定是否允許當前請求。具體判斷邏輯如下。
判斷請求Referer是否為空白。
如果請求Referer為空白,則查看是否允許空Referer。
如果允許空Referer,則請求被允許。
如果不允許空Referer,且白名單Referer列表為空白,則請求被允許。
如果不允許空Referer,且白名單Referer列表不為空白,則請求被拒絕。
如果請求Referer不為空白,則執行步驟2。
判斷黑名單Referer列表是否為空白。
遍曆黑名單Referer列表。
如果黑名單Referer列表存在匹配條目,則請求被拒絕。
如果黑名單Referer列表不存在匹配條目,則執行步驟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。