Hebikuzure's Tech Memo

2011年8月10日

より深い防御: HTML5 Sandbox によるマッシュ アップのロックダウン

Filed under: IE Blog — hebikuzure @ 6:33 PM

Defense in Depth: Locking Down Mash-Ups with HTML5 Sandbox
http://blogs.msdn.com/b/ie/archive/2011/07/14/defense-in-depth-locking-down-mash-ups-with-html5-sandbox.aspx

昨日に引き続き IE Blog の記事から IE10 で追加された HTML5 Sandbox についての記事を私訳しました。 iframe でホストされるコンテンツに対してサンドボックス機能を提供する事で、外部のコンテンツを安全にマッシュアップて゜きるようにする、という狙いの機能です。

以下の文章は IE Blog の 7/14 の記事 Defense in Depth: Locking Down Mash-Ups with HTML5 Sandbox を hebikuzure が私的に試訳したものです。翻訳については Microsoft Corporation および日本マイクロソフト株式会社とは無関係に hebikuzure が公開情報に基づき独自に行ったものであり、この文書の内容についての文責は公開者である hebikuzure にあります。翻訳の内容および技術的内容については正確を期すよう十分な注意を払っておりますが、誤りや不正確な部分が含まれている可能性がありますので、本文書を利用される際には原文も併せてご確認ください。


より深い防御: HTML5 Sandbox によるマッシュ アップのロックダウン

2011年7月14日 午前9時14分

開発者が各々のサイトでより安全なエクスペリエンスを構築できれば、Web はより良いものになります。これまでの Internet Explorer のリリースごとに、私たちはブラウザー エクスペリエンスが安全セキュアになるようブラウザー向上する事で、その方法を提供してきました。IE10 Platform Preview 2 には、開発者が各々のサイト内のマッシュアップ コンテンツをより強力にロックダウンできる HTML5 Sandbox の全面的サポートが取り入れられています。

HTML5 Sandbox は開発者がページ内の各部分の権限を強力に制限できるようにします。これを利用するには、iframe 要素に sandbox 属性を追加するだけです。

<iframe src="untrusted.html" sandbox></iframe>

sandbox 属性により、フレーム内のコンテンツには以下が許可されなくなります:

  • プラグインのインスタンス化
  • スクリプトの実行
  • ポップアップ ウィンドウを開く
  • フォームの送信
  • ストレージ (HTML5 localStorage, sessionStorage, cookie など)
  • XMLHttpRequest の送信
  • 親ウィンドウの DOM へのアクセス
  • HTC, バイナリ ビヘイビア、データ バインディングの使用

これらの制限により、フレーム内のコンテンツの機能はうまく制限されます。もしこれらの制限が皆さんのサイトでは過剰であれば、属性値のトークンを利用して、コンテンツが利用するために復活させたい機能を示す事もできます。例えば、以下のマークアップでは、フォームの送信とスクリプトの実行以外の上記の制限が行われます:

<iframe src="untrusted.html" sandbox="allow-forms allow-scripts"></iframe>

許可のためのトークンの動作のすべてを確認するには、HTML5 Sandbox Test Drive demo をご覧ください。sandbox 化された iframe 内でブロックされる動作の詳細については IE10 Developer’s Guide をご覧ください。

マッシュアップのセキュリティー問題は Web にとって新しいものではありません; 開発者は自分のサイト内の広告やウィジェット、フォーム、コメント投稿欄などをより安全にするよう、数年来取り組んでいました。これらのコンテンツは、クロス サイト スクリプティング攻撃 (XSS) や情報の漏洩、ユーザー エクスペリエンスの乗っ取りなどの標的となり、それをホストしているサイトにとって危険となる場合がありました。サイトの持ち主はそれに対して以下のような緩和策を取ってきました:

  • サーバー サイド / クライアント サイドでのコンテンツの検証、フィルタリング、エンコーディング
  • 望ましくない API へのアクセスの JavaScript ライブラリを利用したオーバーライド
  • 既存のクロス オリジン ポリシーの動作を期待してコンテンツを別ドメインでホストする
  • IE のレガシーな security="restricted" attribute を利用する

Sandbox のサポートを検知する

私たちは開発者に向けて IE10 Standards Mode (IE10 標準モード) をターゲットにするよう推奨しています。しかしユーザーがうっかり互換表示ボタンをクリックしても sandbox の機能が失われないよう、IE10 ではすべてのドキュメント モードでこの属性をサポートしています。

ユーザーが sandbox をサポートしているブラウザーを利用している場合にのみ表示させたいコンテンツがあるでしょう。そうした場合は、いつでも私たちが推奨しているように、機能の検知をそのために利用してください。HTML5 Sandbox は以下の JavaScript で検知できます:

if ("sandbox" in document.createElement("iframe")) {
window.alert("HTML5 Sandbox is supported!");
}

優秀でセキュアなフォールバック

HTML5 Sandbox をサポートしていないブラウザーでは、この属性は無視されます。これは追加のセキュリティー制限なしにコンテンツが表示される事を意味しています。HTML5 Sandbox は深層防御のテクノロジーですから、上記のようなこれ以外のセキュリティー テクニックに追加する形で利用するべきです。

標準の強化

この機能を実装する過程で、私たちは標準規格がいくつかの分野で強化されるべきだと認識しました。

第一に、ブラウザーは既定で sandbox 内のポップアップをブロックします。しかしながらこれを許可した方が望ましい場合もあります。例えば、 ではサイトは Bing マップのウィジェットを sandbox 化した iframe として表示しますが、大きなサイズの地図や道案内、鳥瞰図などのポップアップ リンクからのポップアップが許可されています。IE10 ではこうした正当なケースでのポップアップの許可を、ms-allow-popups によってサポートしています。私たちはこれについて HTML ワーキング グループにフィードバックを行っています。仕様が更新され、安定したら、ベンダー プリフィクスは取り除かれるでしょう。

第二に、コンテンツを sandbox 化する事はサーバーにとっても重要です。sandbox 属性はコンテンツが iframe 内にある時だけ制限をかけます。もし sandbox 化したコンテンツがユーザーにそのコンテンツを直接ブラウズするよう誘導したら、信頼できないコンテンツは sandbox 化された iframe 内の存在ではなくなり、セキュリティー制限はまったく機能しなくなります。

実装しているブラウザーはありませんが、HTML5 ではサーバーが信頼できないコンテンツは text/html-sandboxed MIME タイプを付けて送信する提案しています。このアプローチには数多くの問題もあります—特に、MIME タイプからは必要な許可トークンを取得できません。HTML5 からこれを削除する提案から生じた議論の後で、私たちは X-Content-Security-Policy HTTP ヘッダーの sandbox ディレクティブに続ける形でサポートする事としました:

X-Content-Security-Policy: sandboxed allow-forms allow-scripts;

最後に、私たちは HTML5 Sandbox のために 26 個のテスト ケースを開発し、W3C に提出しました。

IE10 の HTML5 Sandbox について皆さんのフィードバックを歓迎します。IE10 Platform Preview 2 をダウンロードして、Connect を通じて発見したバグを報告してください。

—Jacob Rossi, プログラム マネージャー, Internet Explorer

コメントする »

まだコメントはありません。

RSS feed for comments on this post. TrackBack URI

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

WordPress.com Blog.

%d人のブロガーが「いいね」をつけました。