iframe sandbox:各トークンで許可される動作

iframeのsandbox属性

iframe sandbox:全トークンをライブ切り替えデモで解説 | We.Inc

iframe sandboxの各トークンをオン・オフして、スクリプト、フォーム、ポップアップ、アラートが動いたり止まったりする様子を確認できます。全トークンを解説します。

空のsandbox属性はiframeを強力に制限します。スクリプトもフォーム送信もポップアップもアラートも使えず、オリジンは不透明になってすべての同一オリジンチェックに失敗します。allow-トークンを1つ追加するごとに、機能が1つずつ戻ります。下のトークンを切り替えて何が動かなくなるかを正確に確認し、埋め込みに必要な最小限の組み合わせをコピーしましょう。

よくある用途と必要なトークン

sandbox属性は、自分が書いていないコンテンツ(ユーザーのHTML、広告枠、生成したページのプレビューなど)を表示するiframeに追加できる、最も手軽なセキュリティ対策です。難しいのは、ある埋め込みにどのトークンが必要かを見極めることです。トークンが足りなくても、たいていは何のエラーも出ずに失敗するからです。下のライブフレームでは実際のテストが動くので、推測せずに各失敗を目で確認できます。埋め込みの基本については、HTMLのiframeと動画のガイドから始めてください。

よくある質問

空のsandbox属性は何をしますか?

すべての制限を一度に適用します。フレーム内のドキュメントは、スクリプトの実行、フォームの送信、ポップアップやモーダルを開くこと、トップウィンドウの遷移、ポインターや画面の向きのロック、ダウンロードの開始ができなくなり、どこにも一致しない一意のオリジンから来たものとして扱われます。

allow-scriptsとallow-same-originの組み合わせはなぜ危険なのですか?

フレーム内のドキュメントがあなたのページと同じオリジンにある場合、この2つのトークンがそろうと、そのスクリプトが親側に手を伸ばしてsandbox属性を削除できます。結果として、普通のiframeと同じ安全性しかなくなります。本当に別のオリジンから来るコンテンツなら、そもそもあなたのページに触れられないので、この組み合わせでも問題ありません。

sandbox内のフォームで送信を押しても何も起きません。なぜですか?

allow-formsがないと、フォームは表示されますが、送信しても検証は行われず、サーバーにデータも送られません。allow-formsを追加してください。フォームが自サイトのCookieやストレージにも依存している場合は、allow-same-originも必要です。

sandbox化したiframeがページ全体をリダイレクトすることはありますか?

allow-top-navigationか、ユーザーがフレーム内をクリックした後にだけ許可するallow-top-navigation-by-user-activationを追加しない限り、できません。両方を外しておけば、埋め込みがあなたのページを別のサイトに置き換えることを防げます。

信頼できないHTMLを安全に表示するにはsandboxだけで十分ですか?

sandboxは主要な防御層ですが、唯一の層ではありません。信頼できないコンテンツは別オリジンかsrcdocから配信し、スクリプトを有効にするときはallow-same-originをオフにしておき、配信方法を管理できるならフレーム内のドキュメントにContent-Security-Policyも追加しましょう。

不透明なオリジンで何が変わるか

エラーなしで失敗するのが普通

sandbox、allow、CSPは役割が違う

すべてのsandboxトークン

トークンはスペース区切りで、大文字と小文字は区別されません。ここにないものはブロックされたままです。

sandboxトークンとそれぞれが許可する動作

コピーして使えるパターン

スクリプトを無効にしてユーザーのHTMLをプレビュー

フレーム内のボタンにはonclickハンドラーがありますが、空のsandboxでは実行されません。

別オリジンのサードパーティウィジェット

ウィジェットは自身のスクリプトを実行してフォームを送信でき、リンクは本物のタブで開けます。あなたのページをリダイレクトすることはできません。

同じ制限をレスポンスヘッダーで送る

サーバーはCSPで自身のページをsandbox化できます。この方法は、ページがフレームではなく直接開かれた場合にも適用されます。

トークンを切り替えてフレームをテスト

下のフレームはsrcdocのドキュメントです。ここではallow-same-originを選べません。srcdocフレームがこのページとオリジンを共有することになり、ヒントで注意している組み合わせそのものになるからです。

スクリプトがブロックされているため、このフレーム内では何も実行できません。

トークン

現在の属性

sandboxテスト用フレーム

スクリプトが実行されました。このフレームのオリジン:{v}

フォームを送信

ポップアップを開く

アラートを表示

フォームが送信されました。

フォームは送信されませんでした。

ポップアップが開きました(そして再び閉じました)。

ポップアップがブロックされました:window.openがnullを返しました。

アラートが表示されました。

アラートがブロックされました:表示されずにすぐ戻りました。

sandbox化したフレームからこんにちは

無料で始める · クレジットカード不要

関連: ガイド|Webマーケティングと集客を学ぶ

製品

ご利用いただける方

機能

リソース

会社情報

サイトマップを見る