Android Chrome 88 とパソコン版 Chrome 92 での SharedArrayBuffer の更新

SharedArrayBuffer は現在、 状況は落ち着いてきました必知事項は次のとおりです。

概要

  • SharedArrayBuffer は現在 Firefox 79 以降でサポートされており、Android でも提供されます。 Chrome 88。ただし、クロスオリジン分離されたページでのみ可能です。
  • SharedArrayBuffer は現在、パソコンの Chrome でご利用いただけますが、Chrome でご利用いただけます。 92 では、クロスオリジンの分離ページに限定されます。もし この変更を段階的に行うことができます。オリジン トライアルに登録すると、少なくとも Chrome まで現在の動作を維持できます。 113.
  • クロスオリジン分離を有効にして SharedArrayBuffer 他のクロスオリジンへの影響を評価 広告プレースメントなど、ウェブサイト上の要素SharedArrayBuffer を確認する サードパーティのリソースで使用して ガイダンスを提供します。

クロスオリジン分離の概要

以下の URL でページを配信すると、ページをクロスオリジン分離できます。 ヘッダー:

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 を維持してください 動作を変更する必要があります。

このページの下部にある「関連情報」セクションをご覧ください をご覧ください。

どうしてこのような結論に至ったのか

SharedArrayBuffer は Chrome 60 でリリースされました(2017 年 7 月です。 Chrome のバージョンではなく日付で時間を考えるなど)があり、すべてが素晴らしいものでした。 6 か月間。

2018 年 1 月、一般的な CPU の脆弱性が明らかになりました。詳しくは、 お知らせ 要したが、本質的にはコードで高解像度の タイマーを使用して、アクセスすべきでないメモリを読み取ります。

これは Google のブラウザ ベンダーにとって問題でした。なぜなら、サイトが Google の WASM で記述できますが、メモリは厳密に制御してください。 アクセスできます。私のウェブサイトでは、私が オンラインバンキングサイトで開いているものが 表示されます実際のところ、 インターネットバンキングのサイトを 開いている場合でもこれらは サポートしています。

これを軽減するため、高精度タイマーの解像度を下げました。 performance.now() として指定します。高精度のタイマーを作成するには、 SharedArrayBuffer ワーカーのタイトなループでメモリを変更し、 別のスレッドで戻します。この問題を効果的に軽減することは、 意図的なコードに重大な影響を与えるため、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 には、他のオリジンのコンテンツを許可して 他のオリジンからのオプトインなしで使用されたこれらのリクエストは、 つまり、完全な「ログイン」状態リクエストできます。最近では、 API では、次を使用して他のオリジンをオプトインする必要があります。 CORS

以前の API を回避するために、Google はコンテンツが 「クロスオリジン読み取りブロック」と名付けました。 したがって、上記のケースでは、JSON がプロセスに入ることはできません。 有効な形式にする必要があります。つまり、iframe は対象外です。iframe の場合は、 別のプロセスに移行します

これらの緩和策を実装し、Chrome に SharedArrayBuffer を再導入しました。 68(2018 年 7 月)ですが、パソコンでのみ利用できます。追加のプロセス要件により モバイルデバイスでは行えませんまた Chrome のソリューションは 「不完全」なもののみをブロックし、データ形式ですが、 (異常だが)推測可能な URL で有効な CSS/JS/画像を使用して、 非公開データが含まれます。

ウェブの標準チームが力を合わせて、より完全なクロスブラウザを開発 説明します。解決策は、「 このプロセスに他のオリジンのコンテンツを取り込むことができます。」 この申告は COOP ヘッダーと COEP ヘッダーを使用して行います。 ページとともに配信されますブラウザがこれを適用し、その代わりにページの SharedArrayBuffer や同様の権限を持つ他の API へのアクセス権。その他のオリジン コンテンツの埋め込みを有効にするには、 Cross-Origin-Resource-PolicyCORS)を使用します。

この制限が設定された SharedArrayBuffer を出荷したのは Firefox でした。 バージョン 79(2020 年 7 月)で利用できるようになりました。

2021 年 1 月に私が執筆した記事を、こんにちは。

それが今のところです。Chrome 88 で SharedArrayBuffer が復活 クロスオリジン分離ページ用の Android(Chrome 92 では同じ) 整合性と完全なクロスオリジンを実現するため、デスクトップと 分離します

パソコン版 Chrome の変更を遅らせる

これは、「オリジン トライアル」という形式の一時的な例外です。データ アナリストが クロスオリジン分離ページの実装に時間がかかる。次のことが可能になります。 SharedArrayBuffer(ページをクロスオリジン分離する必要はありません)。「 この例外は Chrome 113 で期限切れとなります。この例外はパソコン Chrome。

  1. 送信元のトークンをリクエストします。
  2. ページにトークンを追加します。次の 2 つの方法があります。 <ph type="x-smartling-placeholder">
      </ph>
    • 各ページの見出しに origin-trial <meta> タグを追加します。たとえば 次のようになります:
      <meta http-equiv="origin-trial" content="TOKEN_GOES_HERE">
    • サーバーを構成できる場合は、トークンを追加して Origin-Trial HTTP ヘッダーを使用します。結果のレスポンス ヘッダーは、 次のようになります。
      Origin-Trial: TOKEN_GOES_HERE

関連情報

バナー写真作成者: Daniel GregoireUnsplash より