Flash Platform セキュリティの概要

Flash Player 9 以降、Adobe AIR 1.0 以降

Flash Player および AIR ランタイムで使用されるセキュリティモデルの大部分は、ロードされた SWF ファイル、HTML、メディアおよびその他のアセットの元のドメインに基づいています。特定のインターネットドメイン(www.example.com など)から取得したファイル内の実行可能コードは、常にそのドメインのすべてのデータにアクセスできます。これらのアセットはセキュリティサンドボックスと呼ばれる同じセキュリティグループに配置されます(詳しくは、セキュリティサンドボックスを参照してください)。

例えば、SWF ファイルの ActionScript コードでは、ドメイン内の SWF ファイル、ビットマップ、オーディオ、テキストファイルおよびその他のアセットをロードできます。また、ファイルが ActionScript 3.0 で記述されている場合は常に、同じドメインの 2 つの SWF ファイル間でクロススクリプトを行うこともできます。「クロススクリプト」とは、ファイル内のコードから別のファイルのコードで定義されたプロパティ、メソッドおよびオブジェクトにアクセスする機能です。

しかし、ActionScript 3.0 で記述された SWF ファイルと旧バージョンの ActionScript で記述された SWF ファイルではクロススクリプトはサポートされません。この場合は、LocalConnection クラスを使用して通信できます。 また、SWF ファイルで別のドメインの ActionScript 3.0 SWF ファイルをクロススクリプトして別のドメインからデータをロードする機能は、デフォルトで禁止されています。ただし、ロードした SWF ファイルで Security.allowDomain() メソッドを呼び出すことで、それらのアクセスを許可できます。詳しくは、クロススクリプトを参照してください。

デフォルトでは、次の基本的なセキュリティルールが常に適用されます。

  • 同じセキュリティサンドボックス内のリソースは、常に互いにアクセスできます。

  • リモートサンドボックス内にあるファイルの実行可能コードは、ローカルファイルおよびデータにはアクセスできません。

Flash Player および AIR ランタイムでは、次のサイトを個々のドメインと見なし、それぞれに個別のセキュリティサンドボックスを設定します。

  • http://example.com

  • http://www.example.com

  • http://store.example.com

  • https://www.example.com

  • http://192.0.34.166

http://example.com などの名前付きドメインが http://192.0.34.166 などの特定の IP アドレスに対応している場合も、ランタイムは、それぞれに対して別々のセキュリティサンドボックスを設定します。

開発者が SWF ファイルにそれ自体のサンドボックス以外のサンドボックスのアセットへのアクセスを許可するために使用できる基本的な方法には、次の 2 つがあります。

Flash Player および AIR ランタイムのセキュリティモデルでは、コンテンツのロードとデータの抽出またはデータへのアクセスは区別されています。「コンテンツ」は、ランタイムが再生できるビジュアルメディアを含むメディア、オーディオ、ビデオ、または表示メディアを含む SWF ファイルや HTML と定義されます。「データ」は、コードからのみアクセスできるものとして定義されます。 コンテンツとデータは、それぞれ異なる方法でロードされます。

  • コンテンツのロード - コンテンツは、Loader、Sound、NetStream などのクラスを使用してロードできます。Flex では MXML タグを介し、AIR アプリケーションでは HTML タグを介します。

  • データの抽出 — ロードしたメディアコンテンツからデータを抽出するには、Bitmap オブジェクト、BitmapData.draw() メソッド、BitmapData.drawWithQuality() メソッド、Sound.id3 プロパティまたは SoundMixer.computeSpectrum() メソッドを使用します。drawWithQuality メソッドは Flash Player 11.3 以降および AIR 3.3 以降で使用できます。

  • データへのアクセス — URLStream、URLLoader、FileReference、Socket、XMLSocket などのクラスを使用して、外部ファイル(XML ファイルなど)からデータをロードして、データに直接アクセスできます。AIR には、データのロード用に FileStream や XMLHttpRequest などのクラスが追加されています。

Flash Player セキュリティモデルは、コンテンツのロードとデータへのアクセスのために、様々な規則を定義しています。 一般に、コンテンツのロードには、データへのアクセスより制限が少なくなっています。

一般に、コンテンツ(SWF ファイル、ビットマップ、MP3 ファイルおよびビデオ)はどこからでもロードできますが、ロードされる側のコンテンツとロードする側のコードまたはコンテンツのドメインが異なる場合は、別々のセキュリティサンドボックスに分割されます。

コンテンツのロードには、次のような制限があります。

  • デフォルトでは、ローカルの SWF ファイル(ユーザーのハードディスクなどの非ネットワークアドレスからロードされた SWF ファイル)は、local-with-filesystem システムサンドボックスに分類されます。これらのファイルでは、ネットワークからコンテンツをロードできません。 詳しくは、ローカルサンドボックスを参照してください。

  • RTMP(Real-Time Messaging Protocol)サーバーでは、コンテンツへのアクセスを制限することができます。 詳しくは、RTMP サーバーを使用して送信されたコンテンツを参照してください。

ロードされたメディアがイメージ、オーディオまたはビデオの場合、セキュリティサンドボックス外部にある SWF ファイルからピクセルデータやサウンドデータなどのデータにアクセスするには、その SWF ファイルのドメインがメディアの元のドメインにある URL ポリシーファイルに含まれている必要があります。詳しくは、ロードされたメディアへのデータとしてのアクセスを参照してください。

その他のロードされたデータの形態としては、テキストファイルまたは XML ファイルがあり、これらは URLLoader オブジェクトを使用してロードされます。 この場合も、別のセキュリティサンドボックスのデータにアクセスするには、元のドメインでの URL ポリシーファイルによって許可が付与されている必要があります。詳しくは、URLLoader と URLStream の使用を参照してください。

注意: AIR アプリケーションサンドボックス内で実行するコードがリモートのコンテンツまたはデータをロードする場合、ポリシーファイルは必要ありません。