Chrome 124 包含私人網路存取權權限,可放寬混合內容功能。針對需要更多時間準備這項異動的網站,我們目前正在進行淘汰前測試,但這項測試將在 Chrome 132 推出時結束,預計於 2025 年 2 月 4 日推出。這篇文章將說明這項變更,並進一步介紹這項功能的設計、如何遷移目前的網站,以及如何測試導入作業。
異動內容
為了與私人網路上的裝置建立連線,這些裝置沒有全域唯一的名稱,因此無法取得 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-Name
和 Private-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-ID
和 Private-Network-Access-Name
。如果一切設定正確,畫面上應該會顯示下列權限提示:
退出非安全內容淘汰試驗
如果您的網站已註冊非安全內容私人網路存取權淘汰試用版,現在正是時候透過新的權限提示遷移網站,並立即退出試用版。
更新程式碼後,請刪除 HTML、JavaScript 或 HTTP 標頭中的試用權杖。如果不記得試用權杖的存放位置,請參閱先前網誌文章中的註冊淘汰試用方案一節。
您也可以在試用方案的頁面中刪除權杖。
後續步驟
我們仍在探索非 API fetch()
要求的解決方案。
我們已測試多種解決方案,例如使用服務工作者,或將目標位址空間設為新的 Content-Security-Policy。不過,非 API fetch()
要求的最終形狀仍在研究中。
未來可能會透過權限政策支援來自子框架的要求。
日後,我們可能會支援權限政策,放寬子畫面的功能。
私人網路用途的意見回饋
如果你在私人網路上代管網站,且需要來自公開網路的請求,Chrome 團隊希望你提供意見回饋!請透過 Chromium Issue Tracker 回報問題 (元件:Blink>SecurityFeature>CORS >PrivateNetworkAccess) 或 GitHub 存放區。