私人網路存取權:為網路工作站和導覽擷取作業提供額外防護

Jonathan Hao
Jonathan Hao

什麼是私人網路存取權?

私人網路存取權 (PNA,舊稱 CORS-RFC1918 和短暫區域網路存取權) 是一項安全性功能,可限制網站傳送要求給私人網路上的伺服器。這有助於保護使用者和內部網路免於遭受跨網站要求偽造 (CSRF) 等潛在攻擊。Chrome 已逐步實作 PNA,並會在日後的版本中擴大保護範圍。

主要 PNA 保護措施 (及其目前狀態)

  • 安全內容:只有安全內容才能發出私人網路子資源要求 (自 Chrome 94 起實施)。詳情請參閱私人網路存取權更新文章
  • 預檢要求:Chrome 會在私人網路子資源要求之前傳送預檢要求,檢查伺服器權限 (開發人員工具會顯示於 Chrome 104 版本以後失敗,在 Chrome 130 中強制執行的警告)。相關說明請參閱私人網路存取權:預檢簡介。自 Chrome 123 起,如果預檢是因為 PNA 而建立並傳送,Chrome 會略過部分 CORS 標頭,例如 Accept
  • 同源豁免條款:自 Chrome 115 起,來自可信來源的同源要求不受 PNA 限制。

延伸防護:網路工作人員

PNA 防護功能將擴及網路工作者 (專用工作者、共用工作者和服務工作者)。包括:

  • 擷取 worker 指令碼:需要安全的內容和偏好檢查,才能使用較不公開的 IP 位址。自 Chrome 110 版起,將在 Chrome 130 版中強制執行的警告。
  • 工作站指令碼啟動的擷取作業:所有從工作站指令碼中擷取的擷取作業都會遵循相同的 PNA 規則。

從 Chrome 124 開始,您可以按照下列步驟測試強制執行機制:

  • 停用 chrome://flags/#private-network-access-ignore-worker-errors
  • 啟用 chrome://flags/#private-network-access-respect-preflight-results

進階防護:導覽擷取

由於 PNA 可能用於 CSRF 攻擊,因此也適用於瀏覽擷取作業 (iframe、彈出式視窗)。Chrome 123 開始針對失敗情形顯示警告,並計劃針對 Chrome 130 強制執行。

自 Chrome 124 版起,您可以透過下列方式測試違規處置功能:

  • 停用 chrome://flags/#private-network-access-ignore-navigation-errors
  • 啟用 chrome://flags/#private-network-access-respect-preflight-results

當 PNA 封鎖導航要求時,使用者會看到特定錯誤,並有手動重新載入及允許要求的選項。

當 PNA 封鎖導航要求時,使用者會看到特定錯誤,並有手動重新載入及允許要求的選項。
當 PNA 封鎖導覽要求,使用者就會看到特定錯誤訊息,其中有手動重新載入及允許要求的選項。

網站受到影響時該怎麼辦?

私人網路存取權:介紹預檢一文提供相關指引。重要的是,用於導覽要求:

  • Access-Control-Allow-Origin 不得為萬用字元 ("*")。
  • Access-Control-Allow-Credentials 必須設為 "true"

後續步驟

  • WebSockets:自 Chrome 126 起,PNA 將暫定 WebSocket 握手 (先收到警告)。
  • 全面執行:Chrome 130 將暫時強制執行所有 PNA 限制 (封鎖不符規定的要求)。使用者可以透過網站設定,為信任的網站覆寫 PNA。

私人網路用途的意見回饋

如果您透過私人網路代管的網站需要來自公用網路的要求,Chrome 團隊很樂意提供意見!請前往 Chromium Issue Tracker 提報問題 (元件:Blink>SecurityFeature>CORS>PrivateNetworkAccess)。

相片來源:Jakub Żerdzicki 提供,取自 Unsplash