HTML Academy · レッスン

iframeのサンドボックスとPermissions Policy

sandboxとPermissions-Policyで埋め込みコンテンツを制限します

レッスン 3/414 ステップ

「iframeのサンドボックスとPermissions Policy」はCoddyKit上の無料HTML Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはHTML Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 HTML Academyコースには全4レッスンが含まれています。

サンドボックス iframe を使う理由

iframe 内の信頼できないコンテンツ(サードパーティ製ウィジェット、ユーザーが送信した HTML のプレビュー、埋め込みゲーム)に、ブラウザーのすべての機能へのアクセスを許可すべきではありません。sandbox 属性は iframe が実行できる操作を制限し、悪意のあるコンテンツだった場合の被害を抑えます。

空の sandbox = 最大の制限

値を指定しない <iframe sandbox src="..."> は、すべての制限を適用します。スクリプト、フォーム、ポップアップ、トップレベルのナビゲーション、プラグインが無効になり、一意のオリジンとして扱われます。これを出発点とし、埋め込みコンテンツに必要なものだけを追加してください。

機能の追加

sandbox トークンを使うと、特定の機能を再び有効にできます。sandbox="allow-scripts allow-same-origin" は、スクリプトの実行と同一オリジンへのアクセスを許可します。各トークンは 1 つの制限を緩和するため、iframe が実際に必要とする最小限のセットだけを組み合わせてください。

<iframe sandbox="allow-scripts allow-same-origin" src="https://embed.example.com/widget"></iframe>

よく使うトークン

allow-scripts は JS を有効にします。allow-forms はフォーム送信を有効にします。allow-popups は window.open を有効にします。allow-same-origin は iframe を一意のオリジンとして扱わないようにします(localStorage に必要です)。allow-top-navigation は親ウィンドウのナビゲーションを許可します。

危険な組み合わせ

自分のオリジンでホストしている iframe に対して allow-scripts と allow-same-origin を組み合わせると、iframe は自身の sandbox を削除する機能を含め、オリジンへの完全なアクセス権を持つようになります。信頼できるコンテンツの場合にのみ組み合わせ、信頼できないコンテンツでは allow-same-origin を省略してください。

Permissions Policy

Permissions Policy(以前の Feature Policy)は、ページとその iframe が使用できるブラウザー API(カメラ、マイク、位置情報、フルスクリーン、自動再生など)を制御します。親ページに設定すると、Permissions-Policy: geolocation=() によってどこでも位置情報をブロックできます。

iframe ごとの権限付与

iframe の allow 属性は、その iframe に対する親のポリシーを上書きします。<iframe allow="camera; microphone"> を指定すると、親ページのデフォルトポリシーで拒否されていても、iframe 内でそれらの API を使用できます。

<iframe
  src="https://video-call.example.com"
  allow="camera; microphone; fullscreen"
  sandbox="allow-scripts allow-same-origin">
</iframe>

権限の一覧

仕様で定められる一覧は変化し続けています。カメラ、マイク、位置情報、加速度計、ジャイロスコープ、磁力計、決済、USB、MIDI、フルスクリーン、自動再生、ピクチャーインピクチャーなど、さらに数十種類があります。一覧を監査し、ページで必要としないものはすべて明示的に拒否してください。

ポリシー違反の報告

Permissions-Policy は、CSP の report-uri と同様に、設定したエンドポイントへ違反を報告します。移行中にこれを利用してください。厳格なポリシーを有効にし、何が壊れるかを確認してから、正当な機能に必要な範囲だけ段階的に緩和します。

オリジン分離

機密性の高いページでは、Cross-Origin-Opener-Policy: same-origin と Cross-Origin-Embedder-Policy: require-corp を設定してください。これによりページがクロスオリジンのウィンドウから分離され、Spectre 型のタイミング攻撃から保護されるとともに、SharedArrayBuffer が使用可能になります。

多層防御

Sandbox、Permissions Policy、CSP、COOP/COEP を組み合わせて保護を重ねます。それぞれが異なる種類の攻撃から守ります。サードパーティ製コンテンツの埋め込みは十分にリスクが高いため、単一の緩和策では不十分です。1 つが回避されても別の対策で検出できるよう、組み合わせてください。

テスト

Chrome DevTools の Network パネルと Issues パネルを使って、sandbox と権限に関する違反を見つけてください。多くの違反は何も表示されずに発生します(API が単に undefined を返すか、Promise を reject します)。明示的な報告エンドポイントを用意すると、本番環境で違反を発見しやすくなります。

理解度チェック

自分のオリジンでホストしている iframe では、sandbox="allow-scripts allow-same-origin" の組み合わせがなぜ危険になる可能性があるのですか?

まとめ

iframe ではデフォルトで sandbox を有効にし、コンテンツに必要なトークンだけを追加してください。信頼できないコンテンツでは allow-scripts と allow-same-origin の組み合わせを避けてください。Permissions Policy で強力な API をサイト全体で拒否し、iframe の allow 属性で例外を許可してください。CSP と COOP/COEP も組み合わせて、多層防御を実現します。

無料で開始

AI チューターと学ぶ HTML — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
40
レッスン
159

よくある質問

「iframeのサンドボックスとPermissions Policy」レッスンは無料ですか?

はい。「iframeのサンドボックスとPermissions Policy」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、HTML Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 HTML Academyコースには全4レッスンが含まれています。

「iframeのサンドボックスとPermissions Policy」で何を学びますか?

sandboxとPermissions-Policyで埋め込みコンテンツを制限します ブラウザで直接実行するハンズオンコードでHTML Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

HTML Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのHTML Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「iframeのサンドボックスとPermissions Policy」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このHTML Academyレッスンでコードを書いて実行できますか?

はい。すべてのHTML Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Content Security Policyのmeta http-equiv
  2. innerHTMLによるXSSと防止方法
  3. iframeのサンドボックスとPermissions Policy
  4. HTTPSとSubresource Integrity
← HTML Academyに戻る