CORS(Cross-Origin Resource Sharing)是一項網頁標準,允許伺服器明確定義哪些外部網站能存取其資源,以及允許哪些 HTTP 請求方法。目的在於打破「同源政策」限制,從而實現跨域存取功能,但若設定不當會造成重大資安漏洞。


常見 CORS 錯誤與攻擊類型

多數 CORS 漏洞來自於錯誤設置 Access-Control-Allow-Origin 與 Access-Control-Allow-Credentials 兩個 header。例如:

  • 未驗證 Origin 動態回應:如果伺服器無條件將接收到的 Origin header 回傳到 Access-Control-Allow-Origin,就可能讓惡意網站跨域竊取用戶敏感資訊或執行 CSRF。book.hacktricks
  • 允許所有域名(*)又允許帶憑證:如同時設置 Access-Control-Allow-Origin: * 與 Access-Control-Allow-Credentials: true,雖然瀏覽器不執行,但容易導致安全誤判與疏漏。book.hacktricks
  • 特殊 Origin 白名單誤配置:如正則表達式僅針對 .com、-、. 而忽略特殊字符,導致 _(底線)、}(大括號)等域名繞過驗證。
  • null origin、data 協議、沙盒 iframe:部分環境誤將 null origin 加入白名單,易被本地 HTML 檔或 sandbox iframe 利用。book.hacktricks

CORS 跨域攻擊手法簡述

  • 反射型 Origin header(即將 Origin 原封不動回應)
  • JSONP/XSSI 攻擊:可利用 script 或 callback 載入繞過 CORS。book.hacktricks
  • DNS Rebinding 攻擊:動態改變 DNS 回應,讓瀏覽器以攻擊者身份存取內網資源。book.hacktricks
  • Server/Client-side Cache Poisoning:利用漏洞令瀏覽器或伺服器緩存不安全的跨域回應。
  • 修改特殊頭部(如 Content-Type、自定 header)引發預飛檢查(pre-flight)繞過

CORS 防護最佳實踐

嚴格設定 Origin 白名單

  • 只允許信任之網域,切勿將用戶送來的 Origin 無條件放入 Access-Control-Allow-Origin。
  • 若有多個子網域,首選明確列出,勿用寬鬆正則或萬用符號避免含特殊符號繞過。book.hacktricks

條件性允許憑證(Credentials)

  • 若 server 需支援 cookie、token 等憑證傳遞,務必與明確 Origin 配合,且Access-Control-Allow-Origin 不可為 *
  • Access-Control-Allow-Credentials: true 時,不允許 Access-Control-Allow-Origin: *。book.hacktricks

嚴格限制允許的 HTTP 方法/Headers

  • 只允許必要的 GET、POST 等方法。
  • 使用 Access-Control-Allow-Methods、Access-Control-Allow-Headers 指定允許範圍,避免因多餘 header 或高權限 method 提高攻擊面。

保護本地與內網資源

  • 勿允許 localhost、127.0.0.1、0.0.0.0 或內網 IP 於 CORS 白名單中。
  • 對於本地網路開發,避免將 null 或 data:origin 加入白名單。book.hacktricks

避免 JSONP 和 XSSI 風險

  • 若 API 支援 callback(JSONP),僅限信任來源使用並限制 Callback 名稱。
  • 避免動態 script 取得敏感資料。

嚴格驗證與過濾輸入 Header

  • 避免 HTTP Header 注入(如 Origin 包含換行符、特殊字符等)。
  • 主動過濾來自用戶端的所有 Header 欄位,確保合法性。book.hacktricks

配置 Header 防止快取中毒

  • 加入 Vary: Origin header,避免不同 Origin 請求被瀏覽器共用快取。

檢測與回報建議

  • 使用專業工具如 CORScanner、Corsy,自動化探測 CORS 漏洞。
  • 定期滲透測試,審查 API、靜態資源、第三方程式與正則表達式配置。
  • 若發現疑似誤用,應優先修正白名單、憑證機制與 API 路由設計。book.hacktricks

結論與安全提示

CORS 是現代網站安全架構中一項必要但易誤用的機制。正確配置可大幅提升安全性,但任何只求「方便」而寬鬆設置都可能造成嚴重資安風險。建議技術管理者與開發者落實嚴格白名單、Credentials 保護、Header 檢查及快取控制機制,並搭配定期安全檢測,確保站台與用戶資料安全。