Android Chrome 88 和電腦版 Chrome 92 中的 SharedArrayBuffer 更新

可以說,「SharedArrayBuffer」在 但一切都停滯不前以下是一些注意事項:

簡短

  • SharedArrayBuffer 目前支援 Firefox 79 以上版本,且將在 Android 裝置上使用 Chrome 88。不過,僅適用於跨來源隔離的網頁。
  • SharedArrayBuffer」目前適用於電腦版 Chrome,不過僅限 Chrome 92 僅限於跨來源隔離頁面。如果您不想 可及時變更,您可以註冊來源試用,在 Chrome 或 Chrome 版本前保留現行行為 113.
  • 如果打算啟用跨來源隔離,以便繼續使用 SharedArrayBuffer 會評估這項異動對其他跨來源的影響 網站上的 元素,例如廣告刊登位置檢查是否 SharedArrayBuffer 您的任何第三方資源會運用它來瞭解 指引。

跨來源隔離總覽

只要在網頁中提供含有以下項目的網頁,即可隔離不同來源: 標題:

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin

連結後,您的網頁將無法載入跨來源內容,除非您 資源透過 Cross-Origin-Resource-Policy 明確允許這項資源 標頭或 CORS 標頭 (Access-Control-Allow-* 等)。

此外還有 Reporting API, 收集作業失敗時, Cross-Origin-Embedder-PolicyCross-Origin-Opener-Policy

如果不方便及時變更 Chrome 92 版本, 註冊來源試用,即可繼續使用目前的電腦版 Chrome 至少 Chrome 113 版本才會運作。

請查看本頁底部的「延伸閱讀」部分 。

防禦者為何會陷入困境?

SharedArrayBuffer已於 2017 年 7 月推出 Chrome 60,歡迎各位的使用者 根據日期而非 Chrome 版本的時間),所有事情都很棒。 為期 6 個月。

2018 年 1 月,某些熱門 CPU 發現安全漏洞。詳情請參閱 公告 但基本上是指程式碼可以使用高解析度 讀取記憶體不該讀取的計時器。

我們希望允許網站執行,因此造成瀏覽器廠商的問題 以 JavaScript 和 WASM 格式編寫程式碼,但嚴格控管這份 存取碼。如果造訪網站,我就不能讀取 與您開啟的網路銀行網站一樣事實上,我不應該 甚至知道你已開啟網路銀行網站這些基礎知識 網路安全。

為解決這個問題,我們降低了高解析度計時器的解析度, 使用 performance.now()。不過,你可以使用以下指令,建立高解析度計時器 SharedArrayBuffer,方法是在 worker 緊密迴圈中修改記憶體,並讀取 再回到另一個討論串中如果沒有必要,就無法有效緩解這個情況 嚴重影響意料之外的程式碼,因此已停用 SharedArrayBuffer 以致於可能必須趕在最後一刻 大幅更動專案,甚至將專案全部取消

常見的緩解方式是確保網頁的系統程序不包含 儲存的資料Chrome 已投入許多程序 一開始的架構 (記得這句話?), 但許多網站的資料也可能是同一程序的:

<iframe src="https://your-bank.example/balance.json"></iframe>
<script src="https://your-bank.example/balance.json"></script>
<link rel="stylesheet" href="https://your-bank.example/balance.json" />
<img src="https://your-bank.example/balance.json" />
<video src="https://your-bank.example/balance.json"></video>
<!-- …and more… -->

這些 API 都有「舊版」允許從其他來源的內容 而未從其他來源選擇加入的項目。這類要求是透過 其他來源的 Cookie,因此資料完整「已登入」請求。現代新作 API 需要其他來源透過以下方式選擇加入: CORS

解決這些舊版 API 的問題時,會阻止系統將內容輸入 如果網頁顯示「不正確」,且稱之為跨來源讀取封鎖,就表示該網頁的處理程序。 因此在上述情況下,將不允許 JSON 進入程序,因為 和這些 API 的有效格式也就是除了 iframe 以外,針對 iframe 將內容放在不同程序

因應這些因應措施後,我們在 Chrome 中重新推出 SharedArrayBuffer 68 (2018 年 7 月),但僅限於桌機。額外的流程要求 無法在行動裝置上執行相同的操作該公司也發現 Chrome 的解決方案 不完整,因為我們只封鎖「不正確」資料格式,但 雖然難以猜到,有效的 CSS/JS/圖片 含有私人資料。

人們齊心協力,打造更完善的跨瀏覽器體驗 解決方案解決方案的宗旨是,在網頁上 將其他來源的內容直接導入這個程序。」 這項宣告是透過 COOP 和 COEP 標頭完成 隨著頁面顯示瀏覽器會強制執行 存取 SharedArrayBuffer 和其他功能類似的 API。其他來源 使用者可以透過以下方式啟用內容嵌入功能: Cross-Origin-Resource-Policy敬上 或 CORS

Firefox 是最早透過這項限制出貨的 SharedArrayBuffer。網址: 第 79 版 (2020 年 7 月)。

然後我寫在 2021 年 1 月,你閱讀了這篇文章。你好!

目前這就是我們的現況Chrome 88 將SharedArrayBuffer重新帶入 針對跨來源隔離的網頁,Chrome 第 92 版亦提供相同做法 對一致性及實現跨來源總量的要求 和隔離機制

延遲 Chrome 電腦版變更

此為「來源試用」形式的暫時性例外狀況幫助大眾 花更多時間導入跨來源隔離網頁。這可讓您 SharedArrayBuffer,且無須要求頁面跨來源隔離。 在 Chrome 113 中會有例外,只有電腦版的例外情況才會解除。 。

  1. 針對來源要求權杖
  2. 將權杖加入網頁。方法有以下兩種:
    • 在每一頁的頁首加入 origin-trial <meta> 標記。例如: 如下所示:
      <meta http-equiv="origin-trial" content="TOKEN_GOES_HERE">
    • 如果您可以設定伺服器,也可以新增 使用 Origin-Trial HTTP 標頭產生的回應標頭 如下所示:
      Origin-Trial: TOKEN_GOES_HERE

延伸閱讀

橫幅相片由 Daniel 提供 Gregoire位於 Unsplash