不安全內容的私人網路存取權 (PNA) 淘汰試用即將結束;請按照 PNA 權限提示操作

Yifan Luo
Yifan Luo

Chrome 124 包含私人網路存取權權限,用於放寬複合型內容功能。針對需要更多時間準備對本次異動的網站,我們即將淘汰試用方案。不過,這項試用方案會在 2024 年 9 月 4 日結束,推出 Chrome 126 版本。本文將介紹異動內容、功能設計的詳細資訊、如何遷移目前的網站,以及如何測試導入結果。

異動內容

為了在沒有全域專屬名稱的私人網路上與裝置建立連線,導致裝置無法取得 TLS 憑證,這項功能推出新的 fetch() 選項,可宣告開發人員與這類裝置的通訊的意圖。這包括一項新的政策控管功能,可用來限制每個網站對這項功能的存取權,以及為伺服器預檢回應提供額外中繼資料的新標頭。

什麼是私人網路存取權?

私人網路存取權 (PNA,先前稱為 CORS-RFC1918,簡稱「本機網路存取權」) 是一項安全性功能,可限制網站向私人網路上的伺服器傳送要求。這有助於保護使用者和內部網路,避免使用者和內部網路遭受潛在的攻擊,例如跨網站要求偽造 (CSRF) 攻擊。Chrome 已逐步導入 PNA,並在即將推出的版本中擴大防護功能。

為什麼需要權限提示?

Chrome 94 推出了封鎖功能,讓使用者可透過不安全的公開網站存取私人網路。隨著 私人網路存取權淘汰試用計畫,在將受影響的網站遷移至 HTTPS 的過程中,展現了以下挑戰。常見的疑慮是將私人裝置遷移至 HTTPS,導致違反混合內容檢查的情況。

為解決此問題,我們新增了權限提示,在 Chrome 120 的來源試用中,以及自 Chrome 124 的穩定版。

何時需要權限提示?

我們計劃在權限提示功能推出後,再結束一些里程碑試用。為確保相容性,您必須將公開網站遷移至 HTTPS。如果您無法將私人伺服器遷移至 HTTPS,新的權限提示功能可讓您放寬混合內容檢查。

具有權限提示的私人網路存取權要求的典型工作流程如下。

觸發權限提示

將新的 targetAddressSpace 屬性新增為擷取選項,該要求即可略過複合型內容檢查。

fetch("http://router.local/ping", {
  targetAddressSpace: "private",
});

根據私人網路存取權:引入預檢,任何私人網路要求皆會先執行預檢要求。這項預檢要求會包含新的標頭 Access-Control-Request-Private-Network: true,而對應的回應中必須包含 Access-Control-Allow-Private-Network: true 標頭。

如要配合新的權限提示,裝置必須加入兩個新的回應標頭:Private-Network-Access-NamePrivate-Network-Access-ID

  • Private-Network-Access-ID:48 位元值,以 6 個十六進位位元組的形式呈現,以冒號分隔。
  • Private-Network-Access-Name:符合 ECMAScript 規則運算式的字串的有效名稱/^[a-z0-9_-.]+$/. 名稱長度上限為 248 個 UTF-8 代碼單位。
Private-Network-Access-Name: "My Smart Toothbrush"
Private-Network-Access-ID: "01:23:45:67:89:0A"

操作示範

如要查看示範,請前往:https://private-network-access-permission-test.glitch.me/

您必須啟動個人私人伺服器才能使用示範網站。私人伺服器應以 HTTP 標頭 Access-Control-Allow-Private-Network: true 以及伺服器指定的標頭 Private-Network-Access-IDPrivate-Network-Access-Name 回應。如果一切設定正確,系統就會顯示下列權限提示:

結束不安全內容淘汰試用

針對已註冊非安全情境私人網路存取權淘汰試用服務的網站,請把握這個機會使用新的權限提示遷移網站,並立即結束試用。

更新程式碼後,請刪除 HTML、JavaScript 或 HTTP 標頭中的試用權杖。如果您不記得試用權杖的位置,請參閱上一篇網誌文章的「註冊淘汰試用計畫」一節

建議您一併前往試用頁面刪除權杖。

後續步驟

目前仍在探索非 API fetch() 要求的解決方案。

已測試了幾個解決方案,例如使用 Service Worker,或將目標位址空間做為新的內容安全政策。不過,目前透過非 API fetch() 提出要求的最終型態仍在調查中。

日後,權限政策可能會支援子頁框發出的要求。

我們日後可能會支援權限政策,以放寬子框架的能力。

針對私人網路用途提供意見回饋

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

資源