Referer防盜鏈基于HTTP請求頭中的Referer字段,通過設置Referer黑白名單來控制訪問,防止資源被非法盜用。配置后,CDN會根據Referer信息,允許或拒絕訪問請求。
阿里云CDN的Referer防盜鏈功能默認不啟用,即任何網站均可訪問您的資源。
Referer防盜鏈只是防止CDN流量盜刷的一種方式,更多防護方式參見防范流量盜刷最佳實踐。
將域名添加到Referer黑名單或白名單后,CDN會將該域名的泛域名加入規則名單。例如,填寫
aliyundoc.com
,最終生效的是*.aliyundoc.com
,即所有子域名都會生效。
Referer圖解
Referer是用戶從一個網站跳轉到另一個網站時,記錄的第一個網站的URL信息,即表示當前頁面是通過哪個頁面跳轉過來的。具體由協議、域名、路徑、查詢參數組成,如下圖所示。
Referer本質上就是一個URL,即請求鏈接。
阿里云支持僅域名形式的Referer配置,通過勾選忽略scheme實現。
使用場景
Referer防盜鏈主要用于保護網站的資源不被其他網站直接引用或盜用,常見的使用場景包括:
版權保護:某些網站的內容受版權保護,Referer防盜鏈可以限制只有授權網站訪問這些內容,保護版權。
防止熱鏈盜用:Referer防盜鏈確保資源只能在特定網站上使用,防止其他網站直接引用,減少熱鏈盜用。
提高網站安全性:Referer防盜鏈只允許特定網站訪問資源,防止惡意盜鏈、惡意訪問或盜取敏感信息。
控制流量來源:Referer防盜鏈限制特定網站的流量訪問,有效控制流量來源,提高網站穩定性和安全性。
綜上所述,您可以根據需求,在不同場景中使用Referer防盜鏈功能,保護資源、提高安全性和控制流量。
工作原理
服務器端檢查每個請求的Referer字段,如果Referer字段不是來自白名單配置,就拒絕提供服務,從而節省帶寬和服務器資源。CDN的Referer請求規則如下:
如果瀏覽器攜帶的Referer與黑名單Referer匹配,或與白名單Referer不匹配,則CDN將拒絕該請求的訪問。
如果瀏覽器攜帶的Referer與白名單Referer匹配,則CDN將允許該請求的訪問。
注意事項
配置Referer防盜鏈后,黑名單請求仍可訪問CDN節點,但會被拒絕并返回403狀態碼,CDN日志中也會記錄該請求。
Referer防盜鏈功能基于HTTP請求頭中的Referer字段設置訪問控制規則。黑名單請求被攔截時會產生少量流量費用,使用HTTPS協議訪問還會產生HTTPS請求數費用。
由于CDN流量盜刷來自公網訪問,所以Referer規則僅限于公網域名匹配。
操作步驟
登錄CDN控制臺。
在左側導航欄,單擊域名管理。
在域名管理頁面,找到目標域名,單擊操作列的管理。
在指定域名的左側導航欄,單擊訪問控制。
在Referer防盜鏈頁簽,單擊修改配置。
根據業務需求,填寫Referer配置項。
單擊確定,完成配置。
Referer配置項說明
參數 | 說明 | |
Referer類型 |
說明 黑名單和白名單互斥,只能選擇一種。 | |
規則 |
說明
| |
重定向URL | 請求被攔截后返回302+Location頭,該項為Location頭的值,必須以 | |
高級配置 | 允許通過瀏覽器地址欄直接訪問資源URL | 默認未勾選。勾選后,無論配置的是Referer黑名單還是白名單,系統不攔截空Referer請求,CDN節點允許用戶訪問當前資源。 空Referer包括:
|
精確匹配 | 默認未勾選。勾選后,不再支持通配符(*)缺省。若未使用通配符, | |
忽略scheme |
| |
規則條件 | 規則條件能夠對用戶請求中攜帶的各種參數信息進行識別,以此來決定某個配置是否對該請求生效。
|
Referer驗證
這里使用curl命令測試,-e
后面接referer值,-I
后接CDN加速域名。該命令結果返回響應頭信息。這里以白名單為例進行驗證。
場景一:僅設置Referer規則
該場景僅設置Referer規則為
aliyun.com
,重定向URL、高級配置、規則條件均不配置。將匹配攜帶形如
http(s)://aliyun.com
及其子域名的請求,其他非白名單Referer將被拒絕。
攜帶主域名的Referer訪問測試,命令
curl -e http://aliyun.com -I CDN加速域名
。攜帶子域名的Referer訪問測試,命令
curl -e http://sub.aliyun.com -I CDN加速域名
。攜帶其他域名的Referer訪問測試,命令
curl -e http://aIiyun.com -I CDN加速域名
。空Referer的測試,命令
curl -e " " -I CDN加速域名
。僅域名的Referer訪問測試,命令
curl -e aliyun.com -I CDN加速域名
。
場景二:設置Referer規則并勾選允許通過瀏覽器地址欄直接訪問資源URL
該場景設置Referer規則為
aliyun.com
并勾選允許通過瀏覽器地址欄直接訪問資源URL。高級配置其他選項不勾選,重定向URL、規則條件均不配置。相比場景一中多匹配出空Referer的情形,即攜帶空Referer和直接訪問也將被允許。
不攜帶Referer的訪問測試,命令
curl -I CDN加速域名
。攜帶
" "
Referer的訪問測試,命令curl -e " " -I CDN加速域名
。
場景三:設置Referer規則并勾選忽略scheme
該場景設置Referer規則為
aliyun.com
并勾選忽略scheme。高級配置其他選項不勾選,重定向URL、規則條件均不配置。同場景一的情形,但允許出現不攜帶協議頭,如僅域名
aliyun.com
的Referer請求。
不帶協議頭的Referer訪問測試,命令curl -e aliyun.com -I CDN加速域名
。
常見問題
請求中的Referer字段不是應該默認自帶HTTP或HTTPS協議頭部嗎,為什么還會出現沒有帶上HTTP或HTTPS協議頭部的情況?
一般情況下,用戶請求中的Referer應該是帶有HTTP或HTTPS協議頭部的。然而,在某些情況下,可能會出現沒有帶上HTTP或HTTPS協議頭部的Referer的情況。
一種常見的情況是當用戶從一個不安全的網站(即未使用HTTP加密)跳轉到一個使用HTTPS協議的網站時,瀏覽器可能會根據安全策略(如Referrer-Policy)修改或去除Referer字段,以保護用戶數據的安全性。這種情況下,Referer字段只會包含域名部分,不包含協議頭部。
另外,某些瀏覽器或代理服務器可能會在特定情況下自動去除Referer字段,例如在隱私保護模式下或通過匿名代理訪問網站時。
因此,在實際應用中,需要注意處理請求中Referer字段可能沒有帶上HTTP或HTTPS協議頭部的情況,以確保正確判斷和使用Referer信息。如果請求中Referer字段沒有攜帶HTTP或HTTPS協議頭部,但又想匹配命中該請求,您需要勾選忽略scheme選項。
為什么會出現空Referer,對于此類請求應該怎么處理?
空Referer(也稱為Referer頭為空)是指在HTTP請求中缺失了Referer請求頭部的情況。請求中的Referer頭通常包含完整的URI,其中包括協議(如 http
或 https
)、主機名,可能還包括路徑和查詢字符串等。空Referer可能出現的原因:
直接訪問:用戶直接通過瀏覽器地址欄輸入網址、或通過書簽訪問、或打開一個新的空白標簽頁時,都沒有來源網頁,因此Referer頭為空。
用戶隱私:用戶或用戶使用的軟件(比如瀏覽器擴展或隱私模式)可能出于隱私保護考慮故意去除Referer頭。
安全協議:從HTTPS頁面跳轉到HTTP頁面的時候,為了安全起見,避免敏感信息泄露,瀏覽器通常不會發送Referer頭。
客戶端策略:一些網站或應用程序可能出于安全考慮,通過設置
<meta>
標簽或者HTTP頭(如Referrer-Policy
)控制Referer的發送。跨域請求:某些跨域請求可能因瀏覽器的安全策略而不攜帶Referer頭。
對于帶有空Referer的請求,處理方式取決于具體應用場景和安全要求。以下是一些處理建議:
默認策略:如果您的服務不需要依賴Referer信息來作出決策,那么可以允許帶有空Referer的請求。
允許訪問:對于特定的URL或源,您可以勾選允許通過瀏覽器地址欄直接訪問資源URL選項,只允許來自這些來源的請求,即使Referer為空,CDN節點都將允許用戶訪問當前的資源。