AWS帳號註冊服務 AWS CDN防盜鏈與黑白名單規則配置
第一章:盜鏈到底在偷什麼
所謂「盜鏈」,多半不是把你的檔案下載走那麼簡單(很多人本來就能抓到鏈接),而是把你的資源當作免費的分發後端:用瀏覽器或爬蟲在別的站點引用你提供的圖片、影片或腳本,讓訪客從他們的頁面載入你 CDN 上的內容。這會帶來兩個直接問題:第一是流量與費用的外溢,你的 CDN/傳輸成本被別人利用;第二是風險放大,你失去對內容被如何呈現、被哪些來源呼叫的掌控。
在工程上,防盜鏈不是要「絕對阻止」所有人拿到內容,而是要把最常見、最可控的濫用攔在門外。真要做到完全不可取得,通常要上簽名、一次性 Token 或強認證流程,難度與成本也高。本文聚焦在 AWS CDN 的常見路線:依來源檢查(常用 Referer)並用黑白名單策略做放行或拒絕,讓策略落地且可維護。
AWS帳號註冊服務 第二章:AWS CDN 的能力邏輯(用什麼元件做判斷)
以 CloudFront 為例,它本質上是一個在邊緣節點層級做請求處理的分發網路。你要做防盜鏈,通常會用到以下幾種能力:
- 把請求送到特定行為(Behavior)與對應的快取策略。
- 在請求進入時或回應前,用條件判斷請求頭內容,決定是否拒絕或轉導。
- 配合 WAF(Web Application Firewall)或 CloudFront 的條件機制,建立黑白名單規則。
- 用日誌或監控確認命中情況,避免誤封。
在實務上,最常用的是:CloudFront + WAF。原因很直觀:WAF 對「依請求特徵(例如 Referer)做條件匹配」提供了清晰的規則語義,且可以用 Web ACL 統一管理。你可以把「可信來源」列進白名單,把「明顯可疑或不想服務的來源」列進黑名單,然後用規則優先序控制結果。
第三章:Referer 是可用但不完美的訊號
Referer(常被寫成少一個 r 的 mis-typing,但標準仍是 Referer)是瀏覽器在發出請求時可附帶的上一頁 URL。很多盜鏈行為會直接從他們的頁面引用你的資源,因此 Referer 會暴露來源域名。於是我們可以用「Referer 包含特定網域 → 放行」的方式做防護。
但要正視它的不完美:
- 有些請求不會帶 Referer,例如:直接輸入網址、從書籤打開、或某些隱私設定/反追蹤策略。
- 某些場景 Referer 會被截斷或被降級(例如只給網域,不給完整路徑),導致字串比對過於嚴格時誤封。
- 盜鏈者可以偽造 Referer(不過對一般使用者仍有門檻),所以它更像「降低濫用」而不是「加密鎖」。
AWS帳號註冊服務 因此黑白名單策略要設計得有彈性:你可以選擇「沒有 Referer 就拒絕」或「沒有 Referer 但其他條件符合就允許」,核心取決於你的業務風險與實際流量型態。
第四章:黑白名單策略的三種常見型態
在配置規則前,先決定策略型態,這會影響你後續規則是否清晰。
型態 A:全白名單(白名單過濾)
只允許特定來源域名的 Referer。優點是簡單、風險可控;缺點是容易因為 Referer 缺失或格式差異造成誤封。如果你服務的是高度受控的前端(例如自家網域、且大多數請求都必定由你的網頁觸發),這個型態很有效。
型態 B:黑名單阻擋(黑名單過濾)
列出明確不想接受的域名或特定字串。優點是對「沒有 Referer」或「格式不一致」較不敏感;缺點是黑名單要持續維護,盜用者可以不斷換域名。
型態 C:白名單 + 例外(折衷策略)
主體採白名單,但對特定路徑、特定格式或特定類型請求允許例外,例如:CDN 內部重試、特定第三方播放器、或公開下載頁面。這種做法通常最符合企業環境的現實:既要管控,又要避免不必要的客訴與客服成本。
第五章:規則配置要點(從 WAF 到白名單/黑名單)
以下以「用 Referer 判斷」為主軸,說明你在 WAF(Web ACL)中常見的規則設計方式。不同團隊可能在命名、分段上有所差異,但核心思路一致:把條件拆成清楚的集合,並用規則優先序控制結果。
5.1 建立白名單條件(Allow List)
你可以把白名單設計成「Referer 包含你的可信網域」的條件。實務上建議不要做過度精確的整段 URL 比對,而是針對常見的網域結構或子網域做包含比對,例如:
- 允許:https://www.example.com 與 https://sub.example.com 相關請求
- 允許:你的行動端網域、管理系統域名、或前端實站域名
原因很簡單:很多瀏覽器與框架請求的 Referer 可能只保留部分資訊。你若硬比「完整路徑」或「完整 query」,誤封的機率會上升。
5.2 建立黑名單條件(Deny List)
黑名單可以先從最明顯的來源開始:例如你在日誌中看見某些盜鏈網域大量命中,或來自特定論壇/聚合站點的異常流量。黑名單條件的精準度可以稍高,但仍要避免把剛好與合法站點重疊的片段誤傷。
另外,黑名單不需要一次做到完美。它的目的在於先阻擋最糟糕的一批濫用源,剩下的交給白名單與例外處理逐步修正。
AWS帳號註冊服務 5.3 沒有 Referer 怎麼辦(關鍵決策點)
這是防盜鏈最常見的誤傷來源。你需要決定一個預設行為:
- 預設拒絕(Default Deny):沒有 Referer 的請求一律拒絕。好處是防盜更乾淨;壞處是可能阻斷某些直接訪問或應用層使用情境。
- 預設允許(Default Allow):沒有 Referer 的請求允許,但用其他條件降低風險。這通常搭配黑名單阻擋與更嚴格的其他判斷(例如 User-Agent、URL path、或是否為特定內容類型)。
如果你的內容是「只在你自己的頁面內引用」,採預設拒絕通常合理;如果你有公開下載、分享連結、或第三方嵌入情境,預設允許加例外會更穩。
第六章:路徑分層與行為(Behavior)設計:別用一套規則打天下
很多人一開始把整個分發的行為都套同一套防盜鏈規則,結果很容易踩雷。建議你把 CDN 內容分層,讓規則針對不同資源類型與業務目的運作。
6.1 靜態資產(圖片、CSS、JS)
這些通常最容易被盜鏈。若你的圖片是給前端頁面引用,且幾乎都會從你的網域產生 Referer,白名單策略最有效。你可以針對例如 /images/*、/assets/* 建立規則。
6.2 影片/串流(特別注意)
影片常見使用情境包含:播放器嵌入、跨域 token、或第三方播放器。盜鏈防護不能只靠 Referer,否則很容易破壞播放。若你確實要加 Referer,務必先觀察日誌,確認合法播放器的 Referer 是否穩定,再決定預設行為。
6.3 公開下載(例如 PDF、公開媒體檔)
公開下載的來源多樣,Referer 不一定存在。這類資源如果你強行「沒有 Referer 就拒絕」,常常會帶來不必要的服務中斷與爭議。因此你可能需要把它從防盜鏈保護範圍中排除,或改用更適合的授權方式。
第七章:自訂回應與錯誤處理(提升體驗,也利於除錯)
防盜鏈被命中時,你要想清楚「使用者看到什麼」。如果你直接回 403,前端可能只顯示空白或報錯,造成誤會。建議採用更一致的回應策略:
- 針對靜態資產,回一個清楚的錯誤畫面或資源(例如一張替代圖片)。
- 針對 API 或下載,回一致的 JSON 結構或特定錯誤碼,便於前端與除錯。
- 在回應中避免洩露過多內部資訊,但要保留必要的除錯線索(例如錯誤碼)。
此外,你也應確保快取策略不會把拒絕回應快取到不該快取的範圍。這點尤其在你使用 CloudFront 行為與 WAF 規則交互時要留意:某些錯誤回應如果被 cache 可能造成合法使用者短時間被誤影響。
第八章:測試流程:在上線前把「誤封」測出來
防盜鏈的最大敵人不是盜鏈者,而是你自己的規則過於嚴格。建議至少做以下幾輪測試:
8.1 正常流程測試
- 用你的主要網站/APP 來源頁面載入資源,確認 Referer 在請求中符合白名單條件。
- 測試不同瀏覽器與不同網路環境(例如隱私模式、企業代理、或移動網路)。
- AWS帳號註冊服務 測試常見的前端框架路由跳轉、重導頁面,確認 Referer 是否在預期範圍內。
8.2 無 Referer 情境測試
- 直接開資源 URL(不透過上一頁),看是否被拒絕。
- 使用隱私/反追蹤設定,觀察 Referer 是否消失或被降級。
- 如果你決定「沒 Referer 允許」,確認是否符合你的風險容忍;若決定「沒 Referer 拒絕」,確認你的業務不會因此受損。
8.3 盜鏈模擬測試
- 建立一個臨時網域或頁面,刻意讓 Referer 指向不在白名單的來源。
- 確認被拒絕時回應碼、回應內容、以及前端呈現是否合理。
完成這些測試後,再把規則上線到「較小的分發行為」或「較小的內容路徑」,用監控觀察一段時間,再擴大覆蓋。
第九章:監控與稽核:讓規則越用越準
防盜鏈不是一次設定完成,而是持續迭代。你需要用資料回答兩個問題:誰在被拒絕?拒絕是否合理?
9.1 利用日誌辨識誤封來源
當你的規則命中時,你應能從日誌追蹤:命中事件、對應的請求路徑、實際 Referer 值(或缺失狀態)、以及客戶端是否為正常行為。若你看到大量合法使用者被拒,通常表示白名單條件過於嚴格或漏掉了某些前端網域。
9.2 追蹤趨勢:盜鏈來源是否在換皮
黑名單一開始可能只擋住一小群。若你觀察到拒絕流量來源呈現「大量新網域快速出現」,代表盜鏈者在迭代。這時你要不要把新出現來源加入黑名單、或調整白名單策略範圍,取決於你的風險承受度。
9.3 定期審查白名單
白名單會隨著業務擴張而變得複雜。定期清理不再使用的網域,避免策略越積越重,也降低維護成本。最重要的是:留意子網域與協定(HTTP/HTTPS)是否一致,避免出現「你以為允許了,但實際未匹配」的狀況。
第十章:常見陷阱與你應該避免的設定
實務中常見的坑,往往比「技術難點」更致命。
10.1 過度精準的字串匹配
只要條件依賴完整路徑或 query,就可能在路由變更、CDN 重導、或前端重整時導致誤封。建議以網域為主、路徑為輔,保持穩定。
10.2 忘記子網域/多環境網域
開發、測試、預發、正式的網域不同;也可能同時存在行動端網域或管理後台網域。白名單若漏掉其中一個,就會在特定環境出現「只有某些人看不到資源」的情況。
10.3 把防盜鏈套在不該套的資源上
公開下載、第三方嵌入、或需要跨域播放的內容,用 Referer 限制容易破壞體驗。要做的是「分層保護」,不要一把梭。
10.4 忽略錯誤回應的快取行為
如果拒絕回應被不當快取,會造成短時間大面積誤影響。寧可調整快取策略、確保拒絕回應不要以不合理方式被放大,也不要讓錯誤被擴散。
第十一章:一套可落地的建議配置方案(以企業常見場景為例)
AWS帳號註冊服務 假設你有一個內容站點:圖片與前端資產主要由 www.example.com 載入;影片由你自家的播放器頁面載入,但也允許少量第三方嵌入。你可以考慮如下的落地方式:
11.1 對圖片/前端資產:白名單優先
- 對 /images/*、/assets/* 等路徑啟用 Referer 白名單。
- 白名單包含你的主要網域、以及必要的子網域(例如 img.example.com 或 cdn.example.com 若有對應使用情境)。
- 「無 Referer」情境:先從寬鬆開始(例如允許但觀察日誌),若誤封為零且盜鏈明顯,就逐步收緊。
11.2 對影片:保守策略 + 先觀測再收斂
- 影片路徑先以「黑名單阻擋明顯濫用來源」為主。
- 若你確認合法播放器請求 Referer 穩定,再追加白名單。
- 對第三方嵌入情境,建立明確允許來源清單,避免把嵌入頁面一律拒絕。
11.3 對公開下載:避免硬性拒絕
- 對公開下載路徑暫不使用 Referer 限制,或只用黑名單。
- 若你的商業模式需要更嚴格控制下載,應考慮簽名 URL 或授權 Token,而不是僅靠 Referer。
AWS帳號註冊服務 第十二章:把「防盜鏈」做成制度:上線後才是關鍵
AWS帳號註冊服務 很多團隊在上線當天很自信,因為測試都通過;真正的風險通常在幾天後才浮現:某個新上線的前端域名忘記加入白名單、某個瀏覽器隱私設定導致 Referer 消失、或某次重導讓 Referer 格式改變。
要避免這些問題,你需要把配置流程制度化:
- 新增網域或前端調整時,必須同步檢查防盜鏈白名單。
- 對規則變更做版本管理:至少能回溯「是哪次調整造成某段時間的拒絕上升」。
- 建立觀察窗口:例如上線後 24~72 小時內密切看拒絕事件與來源分佈。
- 把客訴當成信號:若有人反映資源載入失敗,立刻對照日誌,確認是不是誤封。
結語:用黑白名單提高門檻,而不是追求不可能的零風險
AWS CDN 的防盜鏈配置,本質上是在權衡:用相對簡單的條件(例如 Referer)建立一道門檻,阻擋最常見的濫用,並透過黑白名單策略讓控制更精準。你不必追求「絕對阻止所有取得行為」,那通常成本太高且難以維護;你要做的是把風險集中在可控範圍,並用日誌稽核與迭代讓規則逐步變得更貼合你的實際流量型態。
當你把路徑分層、測試流程與監控制度搭起來,防盜鏈就不再是一次性的設定,而會變成 CDN 安全治理的一部分:能用、好管、出問題能追、可逐步收斂。

