|
AIR セキュリティモデルは、開発者の制御下にないデータに対してシステム API を公開することに関連するリスクを軽減しながら、Ajax モデルとの後方互換性を実現することを目指しています。ブラウザーのクライアントサーバーモデルでは、ブラウザーがプレゼンテーションの大半および動的なサードパーティデータの読み込みの一部を処理しています。 サーバーは、機密性の高い処理の多くを実行し、記憶領域や暗号化などの OS に似た機能を提供します。 間接的に公開された関数を通じてやり取りする 2 つのサンドボックスを用意することによって、Adobe AIR では攻撃者がエンドユーザーのコンピューターやデータにアクセスする可能性を低くしています。
Ajax フレームワークの利用
非アプリケーションサンドボックスは事実上 HTML ブラウザーサンドボックスなので、Ajax 開発者は既存のアプリケーションおよびパターンを比較的容易に AIR に移植できることがわかるはずです。 例えば、Web から既存のクロスワードゲームを入手して、そっくりそのまま非アプリケーションサンドボックスのフレームに挿入できます。
非アプリケーションサンドボックスで実行されている Ajax フレームワークは、Web ブラウザーで実行される場合とまったく同じように実行されますが、フレームワークのバージョンによっては、
eval()
やクロスドメインのコード読み込みを利用する場合に、アプリケーションサンドボックスでは完全には機能しない可能性があります。これは、主に、特定のフレームワークが
eval()
やこれに類似する動作にどの程度依存しているか、および開発者がフレームワークのどの部分を使用しているかによって決まります。
これらの制限で回避されないのは、JSON オブジェクトリテラルを含む
eval()
の使用です。これによってアプリケーションコンテンツで、JSON JavaScript ライブラリを使用できます。 ただし、アプリケーションサンドボックスコンテンツで、オーバーロードされた JSON コード(イベントハンドラーを含む)を使用することは制限されます。 その他の Ajax フレームワークおよび JavaScript コードライブラリの場合は、フレームワークまたはライブラリ内のコードが動的に生成されたコードに関するこれらの制限内で機能しているかどうかを確認します。制限に従っていない場合は、フレームワークまたはライブラリを使用するコンテンツを非アプリケーションセキュリティサンドボックスに含める必要があります。
アプリケーションの移行
単純なクロスワードゲームを使用して、
saveGame()
および
loadGame()
などの関数を実装するには、どうすればよいでしょうか。そのためには AIR API にアクセスする必要があり、関連 API をアプリケーションサンドボックスに実装します。 アプリケーションサンドボックス内の関数およびデータは、サンドボックスブリッジを通じて非アプリケーションサンドボックスに公開されます。 このプロセスには以下の手順が含まれます。
-
元のルートコンテンツファイルの名前を
someName.htm
に変更します。
-
myRoot.htm
という名前のファイルを作成し、
someName.htm
を指す
IFRAME
または
FRAME
を含めます。
-
AIR API を呼び出す関数を作成します。 API を直接呼び出さない方が安全です。
-
アプリケーションサンドボックスの機能を非アプリケーションサンドボックスに公開する
parentSandboxBridge
を作成します。
2 つのサンドボックス間の通信は双方向です。
parentSandboxBridge
と
childSandboxBridge
によって、ブリッジでの双方向のやり取りが可能になります。これによって、開発者はアプリケーションとアプリケーション環境の間でのコンテンツフローをより細かく制御できます。
実際の使用例
Signet(del.icio.us ユーザー用のブックマークマネージャー)は、次のように AIR セキュリティモデルを実装した HTML ベースの AIR アプリケーションです。
-
最初に、id が
signetFrame
のフレームと利用可能なドメインを識別するために必要な 3 つの属性を含む、
SignetRoot.htm
が作成されます。
-
SignetRoot.htm
で、
onload
が、公開されるすべての関数を含む
SignetBridge.js
を呼び出します。
-
SignetBridge.js では、
parentSandboxBridge
を通じて
signetFrame
に関数が公開されます。
-
Signet.js
で、公開された関数が直接 AIR API を呼び出します。例えば、
writeRscContentPriv
は
writeRscContent
を呼び出します。
この手法は比較的に単純ですが、効果は絶大です。2 つのサンドボックス用にリモートドメインとローカルドメインが定義され、onload の処理中にブリッジが呼び出され、ブリッジ API を通じて、仲介関数によって API が間接的に実行されます。
|
|
|