為何需要 ";跨來源隔離" 以享有強大的功能

瞭解為何需要跨來源隔離,以更準確地使用 SharedArrayBufferperformance.measureUserAgentSpecificMemory() 和高解析度計時器等強大功能。

在「將網站設為「跨來源隔離」一節中使用 COOP 和 COEP:我們解釋瞭如何以「跨來源」 隔離」執行 COOP 和 COEP這是介紹文章的隨附文章 為何需要跨來源隔離才能在瀏覽器中啟用強大功能。

背景

網路是建立在相同來源 policy:限制安全性的機制 文件和指令碼如何與其他來源的資源互動。這個 原則上,這項原則會限制網站存取跨來源資源的方式。適用對象 例如,來自 https://a.example 的文件無法存取資料 代管於 https://b.example

不過,相同來源政策過去有一些例外狀況,任何網站都能:

  • 嵌入跨來源 iframe
  • 包含圖片或指令碼等跨來源資源
  • 開啟含有 DOM 參照的跨來源彈出式視窗

如果網路可以從頭開始設計,則不會出現這些例外情況。 可惜的是,網路社群瞭解到 且網路已經仰賴這些例外狀況

我們修補了此類寬鬆同源政策的安全性副作用 管理基礎架構其中一個方法是,推出新的通訊協定「跨網域」 來源資源分享 (CORS) 用來確保伺服器允許與 和特定來源的關聯另一個方法是將對 跨來源資源,同時保有回溯相容性。這些 跨來源資源稱為「不透明」再複習一下,機構節點 是所有 Google Cloud Platform 資源的根節點舉例來說 透過 CanvasRenderingContext2D 操控跨來源圖片的像素 才會失敗。

這些政策決定都是在瀏覽情境群組中進行,

瀏覽內容群組

長久以來,CORS 和不透明資源的組合就足以讓 。某些極端案例 (例如 JSON 安全漏洞) 需要修補,但整體來說 允許直接讀取跨來源資源原始位元組 成功。

一切變更都是由 Spectre, 將任何載入至與程式碼相同的瀏覽情境群組的資料 可能很容易辨識透過測量特定行動花費的時間 可以猜出 CPU 快取的內容,透過這樣 處理程序記憶體用量使用精細的計時器,就可能發生這種時效性攻擊 但可以利用高精細度計時器來強化 包含明確 (例如 performance.now()) 和隱性 (例如 SharedArrayBuffer)。如果 evil.com 嵌入了跨來源圖片,則可使用 讀取像素資料的強迫攻擊,讓防護機制必須依賴 「不透明」。

頻譜

在理想情況下,所有跨來源要求都應該經過伺服器明確審查 所屬的專案如果審查作業並非由 資源擁有的伺服器時,資料就不會進入瀏覽網路 以邪惡者的情境為主,因此將遠離「魔法」的敵人 藉此攻擊網頁可能遭受的攻擊我們稱之為跨來源隔離狀態。 這正是 COOP+COEP 的內容

在跨來源隔離狀態的情況下,要求網站的情況會變少 進而解鎖 SharedArrayBufferperformance.measureUserAgentSpecificMemory()高解析度 計時器,精確度較佳 也可用於類神經網路的攻擊這樣還能防止修改 document.domain

跨來源嵌入程式政策

跨來源嵌入程式 政策 (COEP) 可避免 能載入未明確授權的任何跨來源資源 授予文件權限 (使用 CORP 或 CORS)。您可以透過這項功能 文件無法載入這類資源

COEP 的運作方式

如要啟用這項政策,請在文件中附加下列 HTTP 標頭:

Cross-Origin-Embedder-Policy: require-corp

COEP 只能使用 require-corp 關鍵字。強制執行 政策只能從相同來源載入資源的政策。 將其他資源明確標示為可從其他來源載入的資源。

如要讓其他來源載入資源,資源必須支援 跨來源資源共用 (CORS) 或跨來源資源政策 (CORP)。

跨來源資源共享

如果跨來源資源支援跨來源資源共享 (CORS),您可以使用 crossorigin 屬性 就會載入網頁,而不會遭到 COEP 封鎖。

<img src="https://third-party.example.com/image.jpg" crossorigin>

舉例來說,如果這個圖片資源是透過 CORS 標頭提供,請使用 crossorigin 屬性,因此擷取資源的要求將使用 CORS 模式。這也 除非已設定 CORS 標頭,否則禁止載入圖片。

同樣地,您也可以透過 fetch() 方法擷取跨來源資料, 無需特殊處理,只要伺服器以正確的 HTTP 標題

跨來源資源政策

跨來源資源政策 (CORP) 最初是選擇加入的身分,避免資源遭受攻擊 已由其他來源載入在 COEP 中,CORP 可以指定資源 擁有者的政策。

Cross-Origin-Resource-Policy 標頭可使用三個可能的值:

Cross-Origin-Resource-Policy: same-site

標示為 same-site 的資源只能從相同的網站載入。

Cross-Origin-Resource-Policy: same-origin

標示為 same-origin 的資源只能從相同來源載入。

Cross-Origin-Resource-Policy: cross-origin

標有 cross-origin 的資源可由任何網站載入。(加進 CORP 規格和 COEP

跨來源開啟工具政策

跨來源開發者政策 (COOP) 可讓您確保 如要與其他文件隔離頂層視窗,請將其放在 不同的瀏覽情境群組,因此無法直接與 頂層視窗舉例來說,如果文件在 COOP 中開啟 window.opener 的資源將會是 null。此外,函式的 .closed 屬性 開啟者對它的參照會傳回 true

COOP

Cross-Origin-Opener-Policy 標頭可使用三個可能的值:

Cross-Origin-Opener-Policy: same-origin

標示為 same-origin 的文件可共用相同的瀏覽內容 群組,這些文件也明確標示為 same-origin

COOP

Cross-Origin-Opener-Policy: same-origin-allow-popups

具有 same-origin-allow-popups 的頂層文件會保留與任何項目相關的參照 當中不會設定 COOP 或選擇停用隔離功能 將 COOP 設定為 unsafe-none

COOP

Cross-Origin-Opener-Policy: unsafe-none

預設值為 unsafe-none,且允許將文件新增至其開啟工具的 除非開啟器本身俱有 same-origin 的 COOP,否則瀏覽上下文。

摘要

如果您想保證能使用 SharedArrayBuffer 等強大功能, performance.measureUserAgentSpecificMemory()高解析度 計時器,精確度更高 您的文件必須同時使用 COEP,並將值設為 require-corp 值為 same-origin 的 COOP。如果沒有這兩個項目,瀏覽器 也無法保證能安全啟用這些強大的功能。個人中心 您就能確認網頁的狀態 self.crossOriginIsolated敬上 會傳回 true

請參閱將網站設為「跨來源」一文,瞭解導入步驟 隔離」使用 COOP 和 COEP

資源