iframeのサンドボックスとPermissions Policy
sandboxとPermissions-Policyで埋め込みコンテンツを制限します
「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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Content Security Policyのmeta http-equiv
- innerHTMLによるXSSと防止方法
- iframeのサンドボックスとPermissions Policy
- HTTPSとSubresource Integrity