當OSS資源被其他網站非法引用導致流量費用激增時,可以通過配置Referer黑白名單來限制資源的訪問來源,防止資源被盜用。
工作原理
當瀏覽器向OSS請求檔案時,HTTP請求的Referer標題會標識發起請求的源頁面URL。OSS通過校正Referer值來判斷請求來源的合法性,基於預設規則允許或拒絕訪問。
配置防盜鏈後,OSS按照以下優先順序順序執行存取控制判斷:
空Referer檢查:OSS首先判斷請求的Referer欄位是否為空白。如果為空白,按以下邏輯判斷:
允許空Referer:請求通過。
不允許空Referer且白名單為空白:請求通過。
不允許空Referer且白名單不為空白:請求拒絕。
如果Referer不為空白,繼續下一步檢查。
黑名單檢查:OSS檢查請求的Referer是否匹配黑名單。匹配到任意一項則立即拒絕,不再檢查白名單;未匹配則繼續下一步檢查。
白名單檢查:OSS檢查請求的Referer是否匹配白名單。匹配成功則請求通過,未匹配到任何一項則請求拒絕。
配置方式
前往Bucket列表,單擊目標Bucket。
在左側導覽列選擇,啟用防盜鏈選項,按照需求配置Referer規則:
白名單 Referer:允許訪問的網域名稱列表,每行一個。
黑名單 Referer:禁止訪問的網域名稱列表,每行一個。黑名單優先順序高於白名單。
空 Referer:是否允許不帶Referer的請求(如直接在瀏覽器地址欄訪問)。
截斷 QueryString:是否在匹配時忽略URL中
?之後的查詢字串,詳見QueryString解析規則。
Referer規則支援萬用字元:
萬用字元
說明
樣本
*代替0個或多個字元
*.example.com可匹配http://www.example.com、https://help.example.com等?代替1個字元
http://www.aliyun?.com可匹配http://www.aliyunc.comReferer規則也支援帶連接埠的網域名稱或IP地址,如
http://www.example.com:8080、10.10.10.10:8080。說明匹配時不忽略協議(Scheme),配置
http://www.aliyun.com不能匹配https://www.aliyun.com。建議同時添加HTTP和HTTPS版本。單擊保存,完成設定。
情境樣本
僅允許受信任的網站訪問
通過白名單機制僅允許指定網站訪問OSS資源,同時支援使用者直接通過瀏覽器訪問。
步驟一:擷取Referer
配置前需擷取訪問OSS資源的請求來源Referer:
通過OSS即時日誌:前往Bucket列表,在目標Bucket的中尋找
referer欄位,顯示為-表示空Referer。通過瀏覽器開發人員工具:按F12開啟開發人員工具,在網路面板中查看請求的
Referer標題。
步驟二:配置Referer規則
配置項 | 配置值 | 說明 |
白名單 Referer |
| 添加信任的網站網域名稱,建議同時添加HTTP和HTTPS版本。添加控制台網域名稱確保管理功能正常。 |
黑名單 Referer | 留空 | 無需禁止特定來源。 |
空 Referer | 允許 | 確保使用者可直接在瀏覽器地址欄訪問,或從不發送Referer的用戶端正常訪問。 |
截斷 QueryString | 允許 | 忽略URL查詢字串,提高匹配靈活性。 |
步驟三:驗證配置
# 類比白名單內的Referer訪問(預期成功)
curl -e "http://www.aliyun.com" http://bucket.oss-cn-hangzhou.aliyuncs.com/demo.txt
# 類比白名單外的Referer訪問(預期返回AccessDenied)
curl -e "http://www.example.com" http://bucket.oss-cn-hangzhou.aliyuncs.com/demo.txt
# 類比空Referer訪問(預期成功)
curl http://bucket.oss-cn-hangzhou.aliyuncs.com/demo.txt禁止特定惡意網站盜用
允許大部分來源訪問,但明確禁止某些惡意網站盜用資源。通過黑名單機制精準攔截惡意來源。
步驟一:擷取惡意網站Referer
前往Bucket列表,在目標Bucket的中篩選異常流量記錄,查看referer欄位識別惡意網站網域名稱。
步驟二:配置Referer規則
配置項 | 配置值 | 說明 |
白名單 Referer |
| 萬用字元表示允許所有來源訪問。 |
黑名單 Referer |
| 禁止的惡意網站網域名稱,使用萬用字元可禁止整個網域名稱及其子網域名稱。 |
空 Referer | 允許 | 確保直接存取和正常用戶端能正常訪問。 |
截斷 QueryString | 允許 | 忽略URL查詢字串,提高匹配靈活性。 |
步驟三:驗證配置
# 類比正常網站的請求(預期成功)
curl -e "http://www.example.com" http://bucket.oss-cn-hangzhou.aliyuncs.com/demo.txt
# 類比黑名單內網站的請求(預期返回AccessDenied)
curl -e "http://bad-site.example" http://bucket.oss-cn-hangzhou.aliyuncs.com/demo.txt
# 類比空Referer訪問(預期成功)
curl http://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/demo.txt支援微信小程式訪問
微信小程式發起的請求Referer固定為https://servicewechat.com/{appid}/{version}/page-frame.html格式,需針對此格式進行配置。
步驟一:擷取微信小程式Referer格式
微信小程式的Referer格式固定且規律,無需特別擷取,可直接使用萬用字元配置。如需確認具體格式,可前往Bucket列表,在目標Bucket的中查看referer欄位。
步驟二:配置Referer規則
配置項 | 配置值 | 說明 |
白名單 Referer |
| 使用萬用字元相容所有微信小程式的appid和版本號碼。添加控制台網域名稱確保管理功能正常。 |
黑名單 Referer | 留空 | 無需禁止特定來源。 |
空 Referer | 允許 | 某些情況下小程式可能不發送Referer,允許空Referer確保相容性。 |
截斷 QueryString | 允許 | 忽略URL查詢字串,提高匹配靈活性。 |
步驟三:驗證配置
# 類比微信小程式的請求(預期成功)
curl -e "https://servicewechat.com/wx1234567890abcdef/1/page-frame.html" http://bucket.oss-cn-hangzhou.aliyuncs.com/demo.txt
# 類比其他來源的請求(預期返回AccessDenied)
curl -e "http://www.example.com" http://bucket.oss-cn-hangzhou.aliyuncs.com/demo.txt
# 類比空Referer訪問(預期成功)
curl http://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/demo.txt允許OSS控制台預覽和下載
設定防盜鏈後,需在白名單中添加OSS控制台網域名稱以確保管理功能正常。
步驟一:配置規則
配置項 | 配置值 | 說明 |
白名單 Referer |
| 使用萬用字元相容所有OSS控制台的子網域名稱,確保在不同地區的控制台中都能正常預覽。 |
黑名單 Referer | 留空 | 無需禁止特定來源。 |
空 Referer | 允許 | 確保直接存取和控制台預覽功能都能正常工作。 |
截斷 QueryString | 允許 | 忽略URL查詢字串,提高匹配靈活性。 |
步驟二:驗證配置
# 類比控制台訪問(預期成功)
curl -e "https://oss.console.alibabacloud.com" http://bucket.oss-cn-hangzhou.aliyuncs.com/demo.txt也可直接在OSS控制台嘗試預覽和下載檔案進行驗證。
禁止通過URL直接存取
強制所有訪問都必須來自指定網站頁面,通過禁止空Referer阻止使用者直接通過URL訪問資源。
此配置會阻止所有直接存取方式,包括從書籤、郵件連結等途徑的訪問。某些瀏覽器外掛程式、下載工具或視頻播放器可能無法正常工作,因為這些請求通常不包含Referer。
步驟一:確定網站的Referer
確定業務網站的所有可能網域名稱和協議組合,確保配置覆蓋所有合法訪問情境。
步驟二:配置規則
配置項 | 配置值 | 說明 |
白名單 Referer |
| 業務網站網域名稱,根據實際情況添加所有需要支援的網域名稱和協議組合。添加控制台網域名稱確保管理功能正常。 |
黑名單 Referer | 留空 | 無需禁止特定來源。 |
空 Referer | 不允許 | 關鍵配置,不允許空Referer可有效阻止通過地址欄直接存取資源。 |
截斷 QueryString | 允許 | 忽略URL查詢字串,提高匹配靈活性。 |
步驟三:驗證配置
# 類比網站頁面的請求(預期成功)
curl -e "http://www.example.com" http://bucket.oss-cn-hangzhou.aliyuncs.com/demo.txt
# 類比直接存取(預期返回AccessDenied)
curl http://bucket.oss-cn-hangzhou.aliyuncs.com/demo.txt
# 類比其他網站的請求(預期返回AccessDenied)
curl -e "http://other.example" http://your-bucket-name.oss-cn-hangzhou.aliyuncs.com/demo.txtQueryString解析規則
如果設定不允許截斷QueryString,OSS將按照以下規則解析:
規則 | 說明 |
不解碼QueryString | 請求URL為 |
忽略參數大小寫 | 請求URL為 |
不解析參數順序 | 請求URL為 |
應用於生產環境
CDN緩衝繞過風險:當OSS資源配置了CDN加速時,盜鏈請求可能直接命中CDN邊緣節點緩衝並獲得服務,從而繞過OSS的防盜鏈驗證。為確保防護體系完整有效,必須在CDN層面配置相同的Referer防盜鏈規則,實現多層防護。
瀏覽器Referrer-Policy策略影響:現代瀏覽器支援Referrer-Policy標題,允許網站控制跨域請求中發送Referer的詳細程度。某些策略(如no-referrer)會導致瀏覽器不發送Referer資訊,這類請求將被OSS視為空白Referer處理,需要在配置時予以考慮。
視頻播放相容性:使用瀏覽器原生video標籤播放線上視頻檔案時,瀏覽器通常發起兩種請求:帶Referer的初始頁面載入請求和用於擷取媒體資料的空Referer請求。為確保視頻播放功能正常,必須允許空Referer訪問。
配額與限制
觸發條件:僅當通過匿名訪問或簽名URL方式訪問Object時,OSS才執行防盜鏈驗證。使用AccessKey等簽名方式的API調用(即請求包含
Authorization標題)不受防盜鏈規則限制。名單大小限制:Referer白名單和黑名單的總資料大小不能超過20 KB。
生效範圍:防盜鏈規則在Bucket層級生效,無法為Bucket內的特定檔案或目錄單獨配置不同規則。
常見問題
配置防盜鏈後為何未生效?
請按以下順序排查:
瀏覽器環境檢查:某些特定瀏覽器環境(如微信小程式、iframe等)可能修改或設定特定的Referer值。通過OSS即時日誌或瀏覽器開發人員工具查詢請求的實際Referer值,然後重新設定防盜鏈規則。
Referer格式規範:確認填寫的Referer是否規範。來自瀏覽器的請求通常帶有
http://或https://協議首碼,如果配置時遺漏協議部分,則無法正確匹配請求。CDN緩衝繞過:如果使用CDN加速OSS且未在CDN配置防盜鏈,可能導致通過CDN訪問時繞過驗證。請在CDN上配置與OSS一致的防盜鏈規則。
微信小程式中訪問OSS資源提示拒絕訪問如何解決?
微信小程式發起的請求具有固定的Referer格式,通常為https://servicewechat.com/開頭。在防盜鏈白名單中添加*servicewechat.com規則即可相容所有小程式的訪問需求。
瀏覽器地址欄直接存取檔案提示拒絕訪問如何解決?
直接在瀏覽器地址欄訪問屬於空Referer請求。如果防盜鏈配置為不允許空Referer,此類訪問會被拒絕。若需支援直接存取,請將防盜鏈配置中的空 Referer選項修改為允許。
儲存配置時出現InlineDataTooLarge錯誤如何處理?
此錯誤表示配置的Referer名單(白名單和黑名單合計)總大小超過了20 KB限制。建議使用萬用字元合并多條相似規則,或刪除不必要的規則條目以減小配置大小。