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

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 版中強制執行。
  • 由 worker 指令碼啟動的擷取作業:worker 指令碼中的所有擷取作業都遵循相同的 PNA 規則。

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

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

進階防護:導覽擷取

PNA 也適用於導覽擷取 (iframe、彈出式視窗),因為這些項目可能會用於 CSRF 攻擊。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