SharedArrayBuffer
、performance.measureUserAgentSpecificMemory()
、高解像度タイマーなどの優れた機能を高い精度で使用するためにクロスオリジン分離が必要な理由について説明します。
はじめに
ウェブサイトを「クロスオリジン分離」するCOOP と COEP では、「クロスオリジン」を導入する方法を説明しました。 分離されています」状態をモニタリングできます。これは、Security Command Center Premium の ブラウザで強力な機能を利用するためにクロスオリジン分離が必要な理由。
背景
ウェブは同一オリジン
ポリシー: アクセスを制限するセキュリティ機能
ドキュメントやスクリプトが別のオリジンのリソースとやり取りする方法。この
ウェブサイトがクロスオリジン リソースにアクセスする方法が制限されます。対象
たとえば、https://a.example
のドキュメントはデータにアクセスできません
https://b.example
で開催します。
ただし、同一オリジン ポリシーには過去にいくつかの例外がありました。すべてのウェブサイトでできること:
- クロスオリジン iframe の埋め込み
- 画像やスクリプトなど、クロスオリジン リソースを含める
- DOM 参照を含むクロスオリジン ポップアップ ウィンドウを開く
ウェブをゼロから設計できたとしたら、このような例外は存在しません。 残念ながら、ウェブ コミュニティがウェブ コミュニティの主要な利点に ウェブではすでにこれらの例外が適用されていました。
このような緩い同一オリジン ポリシーによるセキュリティの副作用は、2 つの部分でパッチが適用されました。
できます。その方法の一つが、Cross-Cloud Interconnect という新しいプロトコルを導入したことです。
オリジン リソース シェアリング(CORS)
サーバー間でリソースの共有が許可されるように、
表示されます。もう 1 つの方法は、コンテンツへの直接のスクリプト アクセスを暗黙的に
クロスオリジン リソースにアクセスできます。そのような
クロスオリジン リソースは「不透明」と呼ばれ、説明します。たとえば、次のような理由があります。
CanvasRenderingContext2D
によるクロスオリジン画像のピクセル操作
イメージに CORS が適用されていない限り、失敗します。
こうしたポリシーに関する決定はすべて、ブラウジング コンテキスト グループ内で行われます。
長い間、CORS と不透明なリソースを組み合わせるだけで、 確認しました場合によっては、エッジケース(JSON や 脆弱性) パッチの適用が必要でしたが、全体として クロスオリジン リソースの RAW バイトへの直接読み取りアクセスを許可するため、 成功です。
これがすべて
Spectre
コードと同じブラウジング コンテキスト グループに読み込まれるデータも、
読み取り可能な可能性があります攻撃者は、特定の操作にかかる時間を測定することで、
CPU キャッシュの内容を推測でき、それを通じて、
process'できます。粒度の低いタイマーを使用すると、このようなタイミング攻撃が可能になる
プラットフォームに存在するものの、高精度のタイマーを使用して高速化できます。
明示的(performance.now()
など)と暗黙的(
SharedArrayBuffer
秒)。evil.com
にクロスオリジン画像を埋め込む場合は、
Spectre 攻撃によってピクセルデータを読み取るため、保護は以下に依存します。
"不透明度"非効率的です
理想的には、すべてのクロスオリジン リクエストはサーバーで明示的に精査される リソースを所有します。審査が提供されていない場合 アクセスしないと、データが閲覧に送られることは決してありません。 コンテキスト グループに分類されるため、Spectre には到達しません。 攻撃の種類です。これをクロスオリジン分離状態と呼びます。 COOP+COEP の特徴です
クロスオリジン分離状態では、リクエスト元のサイトは
SharedArrayBuffer
、
performance.measureUserAgentSpecificMemory()
、高解像度
タイマーの精度が向上し
スペクターのような攻撃に使用します。また、インフラストラクチャの変更も
document.domain
。
クロスオリジン埋め込みポリシー
クロスオリジン エンベディング ポリシー(COEP)は、 明示的に権限を付与していないクロスオリジン リソースを (CORP または CORS を使用)。この機能を使用すると、 ドキュメントで読み込めないリソースを定義します。
このポリシーを有効にするには、次の 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) 当初は、リソースが Google Compute Engine に 別のオリジンで読み込まれましたCOEP のコンテキストでは、CORP はリソース リソースを読み込めるユーザーに関するオーナー ポリシー。
Cross-Origin-Resource-Policy
ヘッダーは次の 3 つの値を取ります。
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
になります。また、Terraform の .closed
プロパティは
オープナーがそれを参照すると true
が返されます。
Cross-Origin-Opener-Policy
ヘッダーは次の 3 つの値を取ります。
Cross-Origin-Opener-Policy: same-origin
same-origin
とマークされたドキュメントは同じ閲覧コンテキストを共有できます
明示的に same-origin
とマークされている同一オリジン ドキュメントを持つグループです。
Cross-Origin-Opener-Policy: same-origin-allow-popups
same-origin-allow-popups
を含む最上位ドキュメントは、任意の参照を保持します。
COOP を設定していないポップアップや
COOP を unsafe-none
に設定します。
Cross-Origin-Opener-Policy: unsafe-none
デフォルトは unsafe-none
で、これにより、ドキュメントをその冒頭部分に追加できます。
閲覧コンテキスト グループ(オープナー自体の COOP が same-origin
の場合を除く)
概要
SharedArrayBuffer
などの強力な機能へのアクセスが保証されたい場合は、
performance.measureUserAgentSpecificMemory()
または高解像度
タイマーは精度が向上しています。
ドキュメントで値が require-corp
の COEP と、
same-origin
の値と COOP を設定します。どちらもない場合、ブラウザは
これらの強力な機能を安全に有効にするための十分な分離が保証されるわけではありません。マイページ
ページの状況を判断するために
self.crossOriginIsolated
は true
を返します。
実装手順については、ウェブサイトを「クロスオリジン」にする 分離されています」COOP と COEP を使用する。