信頼されないコンテンツの安全な使用

Adobe AIR 1.0 およびそれ以降

アプリケーションサンドボックスに割り当てられていないコンテンツは、ランタイムのセキュリティ基準を満たす場合のみアプリケーションに追加のスクリプト機能を提供できます。ここでは、非アプリケーションコンテンツでの AIR セキュリティコントラクトについて説明します。

Security.allowDomain()

AIR アプリケーションは、Flash Player のブラウザープラグインが信頼されないコンテンツのスクリプトによるアクセスを制限するよりも厳格に、非アプリケーションコンテンツのスクリプトによるアクセスを制限します。 例えば、ブラウザーの Flash Plyaer で、 local-trusted サンドボックスに割り当てられている SWF ファイルが System.allowDomain() メソッドを呼び出すと、スクリプトによるアクセスが指定されたドメインから読み込まれた SWF に付与されます。同様の方法は AIR アプリケーションの アプリケーション コンテンツからは許可されません。許可した場合、非アプリケーションファイルにユーザーのファイルシステムへの不当なアクセス権が付与されてしまうからです。リモートファイルは、 Security.allowDomain() メソッドの呼び出しに関係なく、アプリケーションサンドボックスに直接アクセスできません。

アプリケーションコンテンツと非アプリケーションコンテンツ間のスクリプト作成

アプリケーションコンテンツと非アプリケーションコンテンツとの間をスクリプト化する AIR アプリケーションではさらに複雑なセキュリティの調整が行われます。 アプリケーションサンドボックス内に含まれていないファイルは、サンドボックスブリッジを使用したアプリケーションサンドボックス内のファイルのプロパティとメソッドへのアクセスのみが許可されます。サンドボックスブリッジはアプリケーションコンテンツと非アプリケーションコンテンツ間のゲートウェイとして機能し、2 つのファイル間の明示的な操作を可能にします。サンドボックスブリッジを正しく使用すると、セキュリティの追加のレイヤーが提供され、非アプリケーションコンテンツが、アプリケーションコンテンツの一部となるオブジェクト参照にアクセスするのを制限します。

サンドボックスブリッジのメリットについて、例を使って説明します。AIR ミュージックストアアプリケーションは、独自の SWF ファイルを作成する必要のある広告主に API を提供し、ストアアプリケーションはこのファイルを使用して通信できます。ストアは、ストアが提供するアーティストと CD を探すためのメソッドを広告主に提供する必要がありますが、セキュリティ上の理由でサードパーティの SWF ファイルからメソッドとプロパティを分離する必要もあります。

サンドボックスブリッジはこの機能を提供できます。デフォルトでは、ランタイムで外部から AIR アプリケーションに読み込まれたコンテンツには、メインアプリケーションのどのメソッドまたはプロパティへのアクセス権もありません。カスタムのサンドボックスブリッジ実装を使用すると、開発者はこれらのメソッドやプロパティを公開せずにリモートコンテンツにサービスを提供できます。サンドボックスブリッジは信頼されるコンテンツと信頼されないコンテンツ間の通路と見なすことができ、オブジェクト参照を公開せずに読み込む側のコンテンツと読み込まれる側のコンテンツ間の通信を可能にします。

サンドボックスブリッジを安全に使用する方法について詳しくは、 異なるドメインのコンテンツ間のスクリプト作成 を参照してください。

動的に生成される安全ではない SWF コンテンツからの保護

Loader.loadBytes() メソッドを使用すると、アプリケーションでバイト配列から SWF コンテンツを生成できます。ただし、リモートソースから読み込まれるデータに対するインジェクション攻撃によって、コンテンツを読み込むときに深刻なダメージを与える可能性があります。これは特に、アプリケーションサンドボックスにデータが読み込まれるときに発生することがあります。アプリケーションサンドボックスでは生成された SWF コンテンツで AIR API の完全なセットにアクセスできます。

実行可能な SWF コードを生成せずに、 loadBytes() メソッドを使用する正当な使用法があります。例えば、 loadBytes() メソッドを使用してイメージデータを生成し、イメージ表示のタイミングを制御できます。また、オーディオ再生のための SWF コンテンツの動的な作成など、コードの実行に 依存する 正当な使用法もあります。AIR では、デフォルトで loadBytes() メソッドを使用して SWF コンテンツを読み込むことが できません 。このメソッドでは、イメージコンテンツのみ読み込むことができます。AIR では、 loadBytes() メソッドの loaderContext プロパティに allowLoadBytesCodeExecution プロパティが含まれています。このプロパティを true に設定すると、アプリケーションで loadBytes() を使用して実行可能な SWF コンテンツを読み込むことを明示的に許可できます。次のコードは、この機能の使用方法を示します。

var loader:Loader = new Loader(); 
var loaderContext:LoaderContext = new LoaderContext(); 
loaderContext.allowLoadBytesCodeExecution = true; 
loader.loadBytes(bytes, loaderContext);

loadBytes() を呼び出して SWF コンテンツを読み込み、LoaderContext オブジェクトの allowLoadBytesCodeExecution プロパティを false (デフォルト)に設定すると、Loader オブジェクトは SecurityError 例外をスローします。

注意: Adobe AIR の将来のリリースでは、この API は変更される可能性があります。変更された場合は、LoaderContext クラスの allowLoadBytesCodeExecution プロパティを使用するコンテンツを再コンパイルする必要がある場合があります。