Windows Consumer Preview の WebSocket

Windows 8 Consumer Preview と Server Beta では、IE10 と他のすべての Microsoft WebSocket クライアントおよびサーバー機能で、最終バージョンの IETF WebSocket プロトコル (英語) がサポートされるようになりました。さらに、IE10 には W3C WebSocket API (英語) Candidate Recommendation が実装されています。 WebSocket は安定しているので、開発者はいつでも革新的なアプリケーションとサービスを作り始めることができます。この記事では、W3C WebSocket API (英語) とその基盤になっている WebSocket プロトコルについて簡単に紹介します。更新された Flipbook デモ (英語) では、最新バージョンの API とプロトコルが使われています。 私が書いた以前の記事 (英語) では、次のような WebSocket のシナリオを紹介しました。 WebSocket により、Web アプリケーションはブラウザーにリアルタイムの通知と最新情報を表示することができます。開発者は、ブラウザーに備わっている HTTP 要求/応答モデルの制限に対処するという問題に直面していました。このモデルは、リアルタイム シナリオ向けには設計されていなかったためです。WebSocket により、ブラウザーはサービスとの間で双方向の全二重通信チャネルを開くことができるようになります。そうすれば、どちらの側もこのチャネルを使って直ちにもう一方の側にデータを送信できます。ソーシャル ネットワーキング、ソーシャル ゲーム、金融サイトなど、さまざまなサイトにおいて、異なるブラウザー間で同じマークアップを適切に使って優れたリアルタイム シナリオを実現できるようになりました。 2011…


拡張保護モード

Internet Explorer は、リリースのたびに新しいセキュリティ機能が追加され、インターネットをより安全に利用できるように改良されてきました。Internet Explorer 10 には拡張保護モードという新機能が搭載され、ブラウザーまたはいずれかのアドオンの脆弱性が攻撃者に悪用された場合でも、データを安全に保護できるように考慮されています。 ただし、1 つの方法だけでユーザーのセキュリティを確保することはできません。そこで私たちは、次のような複数の戦略を取り入れています。 ソーシャル エンジニアリング型の攻撃からの保護 世の中には、信頼されている Web サイトを偽装して、個人情報を盗もうとしたり、他人のコンピューターを自由に操ろうとしたりするさまざまな攻撃者がいます。SmartScreen フィルター (英語) は、マルウェア攻撃とフィッシングに対抗するための最も効果的な保護機能 (英語) です。Windows 8 では、Windows シェルにこの保護機能が追加されたため、マルウェアがどのようにダウンロードされた場合でもユーザーを安全に保護できます。 Web サイトの脆弱性を悪用する攻撃からの保護 “善良” な Web サイトでも、セキュリティ上の脆弱性が存在すると、悪意のある Web サイトにデータを盗まれたり、悪意のある Web サイトが自分になりすましてなんらかの操作を実行するのを許してしまったりする可能性があります。このような危険からユーザーを保護する手段として、私たちは、特定の種類の攻撃を自動的に防ぐ XSS フィルター (英語) を用意しています。Web サイト側では、IE10 で新たにサポートされる HTML5 サンドボックスなどの宣言セキュリティ (英語) 機能を使うことで、サイトのセキュリティをより簡単に確保できます。 ブラウザーやオペレーティング システムを悪用する攻撃からの保護 自動更新を利用すると、最新の更新プログラムを確実にインストールすることができます。これは、修正済みのセキュリティの問題からユーザーを保護するために役立ちます。IE9 では、ある種の脆弱性が悪用される可能性を低減するメモリ保護 (英語) 機能が追加されました。この機能は IE10 でさらに強化されています。さらに IE10 には、拡張保護モードと呼ばれる新しい防御層も追加されています。 拡張保護モード Windows Vista の…


IE10 におけるメモリ保護機能の強化

Internet Explorer 10 では、メモリ保護機能に大幅な改良が加えられ、脆弱性が発見されても簡単には悪用できないようになっています。これは、時には有害にもなる Web において、ユーザーの安全を守るために役立ちます。これらの改良点によって、悪意のあるコードの難易度と開発コストは増加し、攻撃者にとって厳しい環境が作り出されます。 攻撃者が被害者のコンピューターにコードを侵入させる手法としては、ソーシャル エンジニアリング型のマルウェアが現在の主流になっています。これは主に、ここ数年の間にブラウザーの脆弱性が少なくなり、悪用するのが難しくなったためです。ところが、多くのユーザーが IE9 にアップグレードし、SmartScreen フィルター (英語) による保護機能を利用するようになるに従って、攻撃者の興味はブラウザーとそのアドオンを直接攻撃することに移ってきています。 今回の記事では、脅威となる状況について説明し、IE9 に搭載されている既存の保護機能の概要と、より高いセキュリティを提供する IE10 の新しいメモリ保護機能をご紹介していきます。 Web ブラウザーに対する攻撃 メモリ関連の脆弱性を悪用する攻撃者は、ブラウザーのコード実行パスを改ざんして、攻撃者が用意したコードを実行させることを目標としています。攻撃者がこれを達成するためには、2 つのことに成功しなければなりません。まず、攻撃対象とする被害者のコンピューター上でコードを実行できるようにする必要があります。このようなコードを用意するために使われるテクニックは、大きく 2 つに分けられます。1 つ目は、Heap Spray のような手法を使い、悪意のある独自のコードをメモリ上に配置する方法です。2 つ目は、Return Oriented Programming と呼ばれる手法により、メモリ上に既に存在するコードを選択して実行する方法です。 さらに攻撃者は、脆弱性を悪用して、コードの実行フローを設計時の状態から改ざんする必要があります。つまり、そのために悪用できるバッファー オーバーフローなどの脆弱性があることが条件となります。条件が揃うと、攻撃者によってコード パスが変更され、攻撃者が意図したコードのアドレスに “ジャンプ” させられる可能性があります。 典型的なバッファー オーバーフロー攻撃では、巧妙に細工したデータ セットをスレッドのスタックに送り込み、割り当てられているバッファーをオーバーフローさせ、他のデータ構造体を上書きするという手法が取られます。攻撃者は、例外処理レコードや関数のリターン アドレスといった構造体を上書きしようと試みます。これにより、コードのフローが攻撃者自身の指定するメモリ上の位置に変更される可能性があります。 他の攻撃の種類としては、解放後使用の脆弱性を悪用するものがあります。この場合、アプリケーションは解放済みのオブジェクトにアクセスするように仕向けられ、そのオブジェクトのメモリが別の目的に使用されます。 ブラウザーの防御機能 メモリ保護テクノロジは、攻撃者の意図が達成されるのを阻止する防御の最前線となるものです。このテクノロジの目標は、脆弱性の悪用を困難で当てにならないものにし、場合によっては不可能にすることです。メモリ保護機能は、脆弱性が悪用されて攻撃者のコードが実行される前に、攻撃を受けたブラウザー プロセスを安全に終了できるようにします。多くの場合、これによって脆弱性が悪用されて被害が発生するまでの時間を遅らせることができ、その間にベンダーは修正プログラムを作成して配布できます。 Internet Explorer で使われているメモリ関連のリスク軽減テクノロジは時代と共に進化し、新しい攻撃手法が出現して広がるのに対応して、多くの攻撃を防御できるようになっています。これまでのバージョンの Internet Explorer で使われてきた /GS コンパイラ フラグなどのさまざまな防御機能も、時間をかけてアップデートされ、強化されています。また、ForceASLR (後ほどお話しします) のように IE10…

1

Windows Consumer Preview の Web プラットフォーム機能

Windows Consumer Preview の Internet Explorer 10 では、2011 年 9 月 13 日にリリースされた Windows Developer Preview の IE10 と比べて、Web プラットフォーム機能が数多く追加および更新されています。そのうちの一部は 2011 年 11 月 29 日にリリースされた IE10 Platform Preview 4 に搭載され、このブログでもご紹介してきましたが、Consumer Preview で初めて使えるようになる新機能もあります。 注: 以下の一覧内のハイパーリンクは、英語のコンテンツを参照している場合があります。 Web プラットフォームの新機能と更新機能 Consumer Preview の Web プラットフォーム機能のうち、Developer Preview に搭載されていなかった機能は次のとおりです。 XMLHttpRequest での Cross-Origin Resource Sharing (CORS) (仕様 (英語) / 記事 /…


IE10 の CORS for XHR

IE10 Platform Preview 4 では、Cross-Origin Resource Sharing (CORS) (英語) for XMLHttpRequest (XHR) (英語) がサポートされており、これによって、ブラウザーが異なっても同じように動作するクロスサイト シナリオの構築が容易になります。CORS for XHR により、サイト間でシンプルかつ柔軟にデータを共有できます。最も基本的なシナリオでは、CORS により、どのサイトからでもアクセスできるデータ ソースを作成することができますが、簡単な微調整を加えて、許可されたサイトに対する制限、データ変更のサポート、および認証の許可を設定することもできます。最も重要な点は、CORS により、サーバーの参加を要求することで既存サイトの安全性を維持できるということです。 シンプルなクロスオリジン XHR クロスオリジン XHR 要求と同一オリジン要求を比較してみましょう。スクリプト上の違いは、open メソッドに渡される URL のみです。たとえば、フォト アルバムのリストをフェッチするスクリプトを作成するとします。 従来の XHR // Script running on http://photos.contoso.com var xhr = new XMLHttpRequest(); xhr.onerror = _handleError; xhr.onload = _handleLoad; xhr.open("GET", "/albums", true); xhr.send(); ここで、アルバムのリストに、別オリジンからアクセスできるようにします。この場合の別オリジンは、まったく別のドメインでも、同じベース ドメインの別のホストでもかまいません。いずれの場合も、ブラウザーから自動的に CORS…


IE10 の CSS3 3D Transforms

CSS3 の機能は、よりリッチで没入的な Web エクスペリエンスの構築に役立ちます。最近の記事では、CSS3 の Transitions と Animations を使ってより個性的なサイトを実現する方法についてご紹介しました。CSS3 3D Transforms (英語) は、文字どおり、サイト開発に新たな次元を加えるものです。たとえば、Metro スタイルを採用している Windows 8 [スタート] 画面では、3D Transforms の微妙な効果を使って、タイルを押し込んだ際の視覚的な変化を実現しています。 Internet Explorer 10 タイルが押し込まれる前の状態 (左) と押し込んだ状態 (右) CSS Transforms に第 3 の次元を加える CSS3 2D Transforms と同様に、3D Transforms は、HTML 要素に幾何学的な変形処理を適用する CSS のプロパティである transform と transform-origin 向けに関数と値を提供します。CSS3 3D Transforms では、変形関数を拡張して、3 次元的な変形を可能にします。たとえば rotate()、 scale()、translate()、skew()、matrix() の各関数は、3 次元空間に対応するため Z 座標を表すパラメーター…


BlobBuilder を使ってファイルを作成する

Web サイトから Web アプリケーションへの移行が進むにつれて、ファイルを効果的に扱うことがますます重要になってきています。Platform Preview 2 以降、IE10 ではクライアント上でファイルの読み取りや切り出しを行えるようにするための File API (英語) がサポートされています。さらに Platform Preview 4 では、新しいファイルを作成するためのツールである BlobBuilder (英語) のサポートが追加されました。また、IE10 にはユーザーがコンピューターに BLOB データを保存できるようにするための新しいメソッドも 2 つ用意されており、これらを使って、クライアント常駐のデータを扱う場合に、優れたエンド ツー エンドのエクスペリエンスを実現できます。 IE Test Drive (英語) では、BlobBuilder と File API の機能を確認できるピアノ デモ (英語) をお楽しみいただけます。ピアノの鍵盤をクリックすると、mp3 形式の音楽ファイルと SVG 形式の楽譜ファイルの 2 つのファイルが作成されます。鍵盤をクリックするごとに、2 つのファイルのサイズが変わっていくようすがご確認いただけると思います。作成した曲を聴く場合は、再生ボタンをクリックします。また、ピアノの鍵盤のすぐ上にあるリンクをクリックすると、音楽ファイルまたは SVG の楽譜ファイルをダウンロードできます。今回のブログ記事では、BlobBuilder と File API の機能に焦点を当て、このデモの動作のしくみについてご紹介します。 BlobBuilder の機能 BlobBuilder は、その名のとおりクライアント上で BLOB…


CSS user-select を使用して選択を制御する

IE10 Platform Preview 4 リリースには、新しい CSS プロパティである -ms-user-select (英語) のサポートが組み込まれています。Web 開発者は、このプロパティを使うと、比較的簡単に Web サイトで選択できるテキストを正確に制御できます。私には、コンピューターで文章を読むときに、テキストを選択する癖があります。このような読み方をするのは、私だけ (英語) ではありません (英語)。インターネット上のテキストを選択することが重要な場面は、他にも多くあります。 例として、典型的なニュース Web サイトを考えてみましょう。ほとんどのページにはニュースの記事が含まれています。ユーザーがテキストを選択しながら読む場合や、内容を共有したいと思う場合があるので、記事の内容は選択できる必要があります。また、ニュース Web ページには、メニューやサイトの他の部分へのリンクもあります。このような項目をユーザーが選択しなければならないケースは、あまりないでしょう。そこで -ms-user-select を使用すると、ニュース記事ではテキストを選択できようにして、メニューではテキストを選択できないようにすることができます。 IE Test Drive サイト (英語) に、このような指定を行うサンプルがあります。 ページ全体に -ms-user-select:none を設定してから、ブログ記事を含む要素に -ms-user-select:element を設定することで、ブログ記事の内容のみを選択できるようにしています。-ms-user-select:element は、IE によって初めて導入された新しいプロパティで、多くの場面で役立つのではないかと思います。要素に -ms-user-select:element を設定すると、その要素のテキストをユーザーは選択できますが、選択できるのは、この要素の範囲内に制限されます。ユーザーがニュース記事のコンテンツを選択する場合に、記事のすぐ下にあるフッター要素まで選択したいと思うことはないでしょう。要素に -ms-user-select:element を設定すると、マウスで選択範囲を正確に指定できているかどうかを気にせずに、記事の内容だけを簡単に選択できるようになります。 -ms-user-select に設定できる値は、次の 4 つです。 text – テキストを選択できます。 element – テキストは選択できますが、指定した要素の範囲内に制限されます。 none – テキストを選択できません。 auto –…


CSS コーナー: フォントの全要素を使用する

CSS3 @font-face ルール (英語) と WOFF フォント パッケージ形式 (英語) のクロス ブラウザー サポートが提供されるようになり、最近の Web 文字体裁は、”Web セーフ フォント” (英語) の領域をはるかに超えて拡張されてきています。New Yorker (英語) などの有名な雑誌では、記事の見出しに使った文字体裁の特徴が失われないように Web フォントを使用していますし、オバマ米大統領の再選キャンペーンでは、個性的なフォントを提供する Web フォントサービスの Typekit (英語) を利用しています。 まだ解決されていない制限があり、それが Web デザインでフォントの全要素を使用できない要因になっています。この制限というのは、多くのフォントに組み込まれている、OpenType® のさまざまなオプション機能を利用できないことです。これらの機能は、カーニング、上付き文字や下付き文字、合字などのコンテキスト字形、数字、代わりの東アジア グリフの利用、装飾的なスワッシュ字形など、基本的な文字体裁機能をサポートするグリフの置換や配置のオプションを定義しています。 例として、Gabriola に組み込まれている OpenType の “スタイル セット” (英語) を適用した場合に、どのようにテキストが表示されるかを見てみましょう。まず、従来の表示のテキストを示します。 これが、スタイル セットを適用すると、次のように表示されます。 CSS3 フォント モジュールの最近の更新では、CSS 内でこのような OpenType 機能を公開する新しいプロパティ セット (英語) が追加されています。このプロパティは、次の 2 種類に大別できます。 共通の…


標準ベースの Web グラフィックに移行する IE10

ユーザーは、どのブラウザーでインターネットのどのサイトを見ても、似たような品質のエクスペリエンスを得られることを期待するものです。ブラウザーを問わず “同じマークアップで同じ結果” を実現する (Same Markup) という目標に対する Internet Explorer での取り組みについて、このブログで初めて話題にしたのは、IE9 Platform Preview 1 のリリースを発表した、2010 年 3 月の記事でのことでした。IE9 によって私たちはこの目標に向けてに大きく前進しましたが、IE10 の HTML5 に基づく標準モードと互換モードは、この取り組みをほぼ完成させるものです。「IE10 の HTML5 解析」では、IE10 の HTML5 ベースの標準モードおよび互換モードで廃止された従来の機能をいくつかご紹介しました。 この記事では、これに加えて 2 つの機能が廃止されたことについてお話しします。Vector Markup Language (VML) と DirectX ベースのフィルターおよびトランジションです。どちらの機能も IE9 以降は MSDN のドキュメンテーションでは非推奨扱いとなっており (たとえば「フィルターおよびトランジション」(英語) の 1 行目には “This topic documents a feature of Visual Filters and Transitions, which is…