阿里雲認證帳號購買 阿裡雲OSS安全防盜鏈配置Referer白名單拒絕流量被白嫖
第一章:為什麼要做防盜鏈
很多人第一次把靜態資源丟到 OSS(圖片、音視頻、下載包),都會先追求「能用」:上傳、設公開、拿到外鏈地址。可很快就會遇到另一種現實——別人拿著你的 URL,在他們自己的頁面或接口裡直接請求你的資源。你的帶寬被吃掉,你的下載量被“虛假放大”,更糟的是,內容還可能被二次分發到不該出現的地方。
所謂防盜鏈,通常就是限制「誰能用你的鏈接」。最常見也最容易落地的手段是 Referer 白名單:只有在瀏覽器請求時,Referer 頭符合你允許的域名,才允許 OSS 回源並返回內容。這能在不改動業務架構的情況下,先把一大批粗糙的搬運行為擋在門外。
但要把它理解透,你就不會把它當成魔法。Referer 不是密碼,它只是“來源提示”。懂得它的邊界,你才能做出真正可用的配置:該限制什麼、在哪些場景失效、如何驗證、如何補強。
第二章:Referer 白名單的工作原理與邊界
瀏覽器在發起資源請求時,通常會帶上 Referer 頭,告訴服務端「我從哪個頁面跳過來的」。當你在 OSS 開啟防盜鏈並配置 Referer 白名單後,OSS 會根據請求頭的 Referer 判斷是否允許返回對應 Object。
這裡有幾個關鍵邊界,必須提前想清楚:
1)Referer 可能不存在
不是所有請求都會帶 Referer。比如:直接在地址欄輸入 URL、某些爬蟲、純後端拉取(服務端到服務端)、部分內嵌環境或 App WebView 的策略。這些請求可能 Referer 为空,結果就是你可能誤殺自己的合法流量。
2)Referer 可被偽造
理論上,攻擊者可以自建請求,自己設定 Referer。Referer 白名單能防的是“使用你鏈接但不做偽裝”的那類行為,不是防所有惡意攻擊。
3)配置不當會導致“看似生效、實際不可用”
很多人只填了一個主域名,卻忘了:子域名、帶參數的頁面、走 CDN 的請求路徑、HTTPS/H T T P 的差異、以及跳轉鏈路。你會發現:手機端、某個子域、或者特定頁面突然 403。
4)不同資源類型與請求方式的行為差異
例如圖片嵌入(<img>)、腳本引用(<script>)、視頻播放(<video>)、以及下載(<a> 直接跳轉)在瀏覽器中的 Referer 行為可能不同。你要針對“實際訪問方式”來測試。
阿里雲認證帳號購買 第三章:上線前的設計思路
在開始配置之前,先做一個簡單的需求拆解:你真正想防的是哪一類“白嫖”?是外部網站的搬運?還是惡意刷流量?是想保護付費內容不被外鏈?不同目標對配置的嚴格程度不同。
建議你按下面順序設計:
1)列出所有合法來源域名
把你所有可能引用資源的頁面域名整理出來:主站、管理端、圖片加速頁、活動頁、以及子域名(例如 img.example.com、cdn.example.com)。如果你有多環境(dev/staging/prod),也要分清。
2)確認是否存在 Referer 為空的合法場景
例如:站內下載頁可能由不同入口觸發;或你有 App 內 WebView 直接載資;或用戶在離線後重新整理導致 Referer 行為改變。你可以先做觀察:從瀏覽器開發者工具查看頭部,或用日誌抽樣。
3)先用“狹義策略”再逐步加嚴
不要一開始就把“所有非白名單都拒絕”設為唯一策略。可以先啟用並監控被拒絕的請求來源,確認誤殺比例低,再逐步收緊。
第四章:阿里雲 OSS 防盜鏈 Referer 白名單配置流程
不同控制台入口可能在細節上略有差異,但核心思路一致:找到針對域名/策略的防盜鏈功能,填入白名單,並將策略作用到你需要保護的 Bucket 或 Object。
下面用“可落地”的步驟描述一套典型流程(以控制台操作為主)。
步驟一:確認 Bucket 與域名策略
先確認你訪問 OSS 的方式。常見有三種:
- 直接使用 OSS Endpoint 的域名。
- 使用自定義域名(CNAME 到 OSS)。
- 通過 CDN(例如加速域名)訪問,實際請求到源站。
防盜鏈依賴 Referer,而 Referer 的值通常來自“引用該資源的頁面域名”。如果你經過 CDN,要注意測試 URL 實際請求頭中的 Referer 是否還保持一致。
步驟二:在 OSS 中開啟防盜鏈能力
進入 OSS 控制台,找到防盜鏈配置或相關安全配置項。通常你可以選擇:
- 配置 Referer 白名單(允許的來源)。
- 是否允許空 Referer。
- 動作:允許/拒絕。
實操時你要特別留意“允許空 Referer”這個選項。若你確定所有合法流量都會帶 Referer,可以關閉;否則你可能在某些客戶端或入口丟失合法訪問。
步驟三:填寫 Referer 白名單(域名與匹配規則)
白名單一般填的是域名或可匹配模式。你要包含:
- 主域名:例如 https://www.example.com 對應的 Referer 常見值。
- 子域名:例如 https://m.example.com、https://admin.example.com。
- 若你使用了自定義資源域名,注意區分“資源域名”和“來源頁面域名”。防盜鏈白名單判斷的是來源頁面(Referer),不是你 OSS 的域名。
在填寫時,建議你以“最精確能覆蓋”的方式放入:例如只填 example.com 可能太寬;只填 www.example.com 可能又太窄。最佳做法是以你實際引用資源的頁面域名為準。
步驟四:選擇作用範圍(整個 Bucket 或特定前綴/Object)
如果你只是想保護某一類資源,比如 private/ 目錄或某套付費文件,盡量用前綴或目標範圍隔離。這能降低誤殺面,並方便你逐步擴展保護。
步驟五:保存並生效,做小流量測試
配置保存後,通常會有一定的生效時間。不要直接對全量資源做“立刻驗證”。你應該從最常見的來源入口(例如 PC 主站)開始,先驗證是否正常回源。
第五章:白名單怎麼設才合理(常見場景與建議)
配置是否“好用”,取決於你是否貼近實際流量的來源結構。下面按場景給出思路。
場景一:只有單一網站域名引用資源
如果你的前端頁面始終同一個主域名(例如全部在 www.example.com 下),那白名單可以只放這個域名,並關閉空 Referer(若你不允許直鏈)。
這種情況最乾淨,風險最低。
場景二:多端入口(PC + H5 + 管理台)
你可能有 www.example.com、m.example.com、admin.example.com。白名單要把這些都包含進去。特別是管理台,可能引用的資源類型不同;你要確保管理台在調用圖片/下載時沒有被拒絕。
若你對管理台不想完全放開,可以只保護特定 Object 前綴,或只允許管理台所需資源。
阿里雲認證帳號購買 場景三:前端域名與跳轉鏈路複雜
例如:活動頁在 event.example.com,但資源實際在主站頁面請求;或鏈路中存在跳轉(302)導致 Referer 值變化。你需要把實際發起請求的頁面域名列入白名單,而不是憑印象。
建議你用開發者工具抓一次“成功與失敗”的對比請求,確認 Referer 值到底是什麼格式。
場景四:經過 CDN / 回源請求
如果你使用 CDN,請注意 Referer 是否在 CDN 層被保留或被某些規則改寫。多數情況下瀏覽器發起的 Referer 會傳遞到源站,但仍可能因 CDN 的行為配置或轉發規則而產生差異。
阿里雲認證帳號購買 你的測試應該以“用戶實際訪問 URL”為準,不要只測源站 URL。
場景五:App 直接拉取資源
如果你的 App 通過內置網路模組直接下載 OSS 資源,很多時候 Referer 會缺失或固定為某個值。你就不能把 Referer 白名單當唯一門禁。
更合理的做法是:對這部分資源改用“帶簽名的短期 URL”(或使用私有 Bucket + 授權方案),而不是指望 Referer。
第六章:驗證配置是否真的有效
配置好之後,你需要用“證據”說話,而不是憑感覺。驗證可以從三條線並行:前端測試、日誌觀察、以及拒絕行為確認。
1)前端請求驗證(成功與失敗)
用瀏覽器打開你允許的頁面,觀察控制台與網路面板:
- 資源是否 200 返回。
- 請求頭 Referer 是否符合白名單預期格式。
- 是否只在某些頁面、某些瀏覽器出現 403。
再用一個“非白名單”的頁面域名(最好用本機或測試域名)去直接引用同一張圖片。你應該能穩定看到拒絕行為。
2)OSS 日誌或指標觀察
如果你看到 403 激增,不能直接下結論是有效還是誤殺。你要看被拒絕的來源域名或請求特徵是否是“你不想要的”。
常見誤殺信號包括:
- 大量來自你自己站點的请求被拒絕(通常是白名單不完整或 Referer 格式不匹配)。
- 特定端(例如 iOS 或特定 WebView)被拒絕很多(可能 Referer 行為差異)。
- 某些 CDN 路徑下全部拒絕(可能轉發規則或 Referer 传遞被改寫)。
阿里雲認證帳號購買 3)針對“空 Referer”做有意識測試
你要確認“是否允許空 Referer”的選擇符合你的策略。例如:把資源 URL 直接貼到新窗口打開,或用無痕模式測試(無痕不一定改變 Referer,但能暴露某些差異)。如果你不允許直鏈,那你應該看到拒絕;如果你允許直鏈但限制其它域名,那你就需要在策略上做平衡。
第七章:常見踩坑與解法
很多防盜鏈配置看似簡單,但一旦上線就會被“細節”拖進坑裡。下面是高頻問題。
踩坑一:只填了主域名,忘了子域名
例如你網站有 www 和 m,但白名單只放 www。結果移動端圖片、視頻播放失敗。
解法:把所有引用資源的頁面域名都列入,並以實測的 Referer 值為準。
踩坑二:誤把“資源域名”當成“Referer來源”
有人以為配置的是“哪些域名能訪問 OSS”,于是把 OSS 的域名或自定義域名填進去。可實際上 Referer 是“來源頁面”,不是你資源的域名。
解法:確認一個成功請求的 Referer 真正長什麼樣,再照它填白名單。
踩坑三:開了很嚴,導致下載/跳轉失效
有些下載鏈接可能是用戶在頁面上點擊後直接跳轉到資源 URL。不同跳轉方式下 Referer 行為可能變化,導致偶發 403。
阿里雲認證帳號購買 解法:針對下載場景單獨驗證。如果下載必須直達,考慮對這類 Object 使用更安全的授權方案,而不是只靠 Referer。
踩坑四:CDN 層改寫導致 Referer 丟失
如果在某些 CDN 節點上源站收到 Referer 为空或不符合白名單,就會出現“部分地區或部分時間段”失效。
解法:用實際回源請求抓包/觀測確認 Referer 是否被保留;必要時調整 CDN 的轉發規則或回源頭策略。
踩坑五:測試環境與正式環境域名不同
你在測試環境看到一切正常,上線後突然 403。最常見原因是:白名單沒有包含正式環境域名。
解法:把 dev/staging/prod 的域名分別列出,或建立可切換的策略管理流程。
第八章:把防盜鏈當“第一道門”,別當“唯一門”
很多團隊把 Referer 白名單配置完成後就宣告“安全了”。我理解這種心理:事情做完了就該有效。但技術上,安全是一套組合拳,不是單點開關。
Referer 防盜鏈擅長的,是把“直鏈搬運”和“簡單外鏈”擋掉,降低帶寬損耗,對外部噪音有明顯抑制效果。你仍然需要考慮:
- 權限控制:把敏感內容放在私有 Bucket,或使用更可靠的授權手段。
- 阿里雲認證帳號購買 短期簽名 URL:針對需要“可控訪問”的內容,使用短時效的签名,避免永久 URL 被公開后無法收回。
- 限速與 WAF:對異常流量做限速、封禁或挑戰。
- 阿里雲認證帳號購買 審計與告警:拒絕量是否異常?某些來源是否在掃你的資源?
把這些拼在一起,你的成本會更低、可控性更強。Referer 白名單是最容易先落地的一步,但它不應該成為你唯一依賴。
第九章:一套可執行的落地清單
如果你要讓這件事在團隊中“做得對”,我建議你把配置落地整理成清單,至少包含以下項目:
- 確認資源使用方式:圖片直連、視頻播放、下載跳轉、API 取流等。
- 整理合法 Referer 白名單:主站、移動端、活動頁、管理台、以及必要的子域名。
- 確認是否允許空 Referer:若有合法場景,明確放行策略或改用授權方案。
- 配置作用範圍:全 Bucket 還是特定前綴/Object。
- 上線前灰度測試:先用最常見入口驗證,再擴到所有端。
- 上線後觀察:403/拒絕來源分布、是否誤殺自家流量、是否有特定端問題。
- 必要時補強:對直鏈需求或 App 下載場景引入簽名 URL 或私有授權。
只要這套流程走完,你的防盜鏈不會變成“配置了但其實沒有用”,也不會變成“配置了然後把自己網站也鎖住”。
第十章:結語——讓安全配置服務於業務
阿里雲 OSS 的 Referer 白名單防盜鏈,做的是“來源可控”。它不要求你重構業務,也不需要你把所有下載都改成簽名 URL。它的價值在於:把最常見的外鏈白嫖成本推高,讓你能更專注在真正的產品與用戶上。
但真正的深度不在於你填了多少域名,而在於你是否理解每一次請求的來源:瀏覽器從哪個頁面來、是否經過跳轉、是否經過 CDN、是否是 App 的直接拉取。只要你用實測和日誌把邊界摸清,Referer 白名單就能成為一個可靠的第一道防線。
如果你現在還在擔心“會不會誤傷”,那就從最小白名單開始、先灰度、再逐步加嚴。安全不是一次性開關,而是把風險收斂到可控範圍的過程。

