SWF ファイル間のクロスドメインおよびサブドメインのアクセス

オンラインで互いに通信する一連の SWF ファイルを開発するとき、たとえば loadMovie()MovieClip.loadMovie()MovieClipLoader.LoadClip()、Local Connection オブジェクトなどを使用する場合は、それらの SWF ファイルを異なるドメイン内でホストすることも、単一スーパードメイン内の異なるサブドメイン内でホストすることもできます。

Flash Player 5 またはそれ以前のバージョン用にパブリッシュされたファイルでは、クロスドメインアクセスまたはサブドメインアクセスに対する制限はありません。

Flash Player 6 用にパブリッシュされたファイルでは、LocalConnection.allowDomain ハンドラまたは System.security.allowDomain() メソッドを使用して、許可済みのクロスドメインアクセス (例 : helpexamples.com のファイルから adobe.com のファイルへアクセス可能にする) を指定できます。サブドメインアクセスを許可するには (例 : something.adobe.com のファイルから www.adobe.com のファイルへアクセスするには)、コマンドは必要ありません。

Flash Player 7 用にパブリッシュされたファイルは、以前のバージョンとは異なる 2 つの方法で SWF ファイル間のアクセスを実装します。1 つ目は、Flash Player 7 にはスーパードメイン一致規則ではなく、ドメイン完全一致規則が使用されている点です。そのため、アクセス対象となるすべてのファイルで (Flash Player 7 より以前の Flash Player バージョン用にパブリッシュしたファイルも含め)、クロスドメインアクセスまたはサブドメインアクセスを明示的に許可する必要があります。詳細については、この項の説明を参照してください。2 つ目は、セキュリティ保護されたプロトコル (HTTPS) を使用するサイトでホストされたファイルでは、セキュリティ保護されていないプロトコル (HTTP または FTP) を使用するサイトでホストされたファイルからのアクセスを明示的に許可する必要がある点です。詳細については、SWF ファイル間の HTTP プロトコルから HTTPS プロトコルへのアクセスを参照してください。

通常、System.security.allowDomain をアプリケーションに呼び出します。ただし、LocalConnection の受信側が HTTPS SWF ファイルで、送信側が HTTPS SWF ファイルでない場合、代わりに allowInsecureDomain が呼び出されます。

次の問題は、Flash Player 7 用にパブリッシュされた SWF ファイルにのみ影響を与えます。受信側が HTTPS で、送信側がローカル SWF ファイルの場合、本来 allowInsecureDomain() でなければならないときでも、allowDomain() が呼び出されます。ただし、Flash Player 8 以降では、HTTPS LocalConnection の受信側が Flash Player 8 以降で、送信側がローカルファイルの場合、allowInsecureDomain() が呼び出されます。

Flash Player 8 以降で実行されるファイルは、Flash Player 7 とは異なります。System.security.allowDomain を呼び出すと、アクセス対象の SWF ファイルが System.security.allowDomain を呼び出したファイルである場合にのみ、クロススクリプト操作が許可されます。つまり、System.security.allowDomain を呼び出す SWF ファイルはそのファイルだけにアクセスを許可することになります。旧バージョンでは、アクセス対象の SWF ファイルが System.security.allowDomain を呼び出したファイルである場合、System.security.allowDomain を呼び出すと、クロススクリプト操作が許可されます。クロススクリプト操作を実行すると、呼び出した SWF ファイルのドメイン全体が開かれます。

System.security.allowDomain("*") および System.security.allowInsecureDomain("*") のワイルドカード (*) 値に対するサポートが追加されました。アクセス元ファイルの種類を問わず、また、任意の場所からロードできる場合、ワイルドカード (*) 値を使用することでクロススクリプト操作が許可されます。ワイルドカード許可は便利ですが、Flash Player 8 以降の新しいローカルファイルセキュリティ規則に準拠していなければなりません。具体的には、ローカルファイルはドメインから取り込めないため、ワイルドカード値を使用することが必要になります。ただし、どのドメインからもファイルにアクセスできることから、ワイルドカード値を使用する場合は十分注意してください。詳細については、「allowInsecureDomain (security.allowInsecureDomain メソッド)」を参照してください。

呼び出したドメインではなく別のドメインから子 SWF ファイルをロードしてしまうことがあります。子 SWF ファイルに親 SWF ファイルをスクリプトさせようとしますが、子 SWF ファイルが派生した最終的なドメインが分りません。このような状況は、たとえばロードバランシングリダイレクトやサードパーティ製サーバーを使用する場合に発生します。このような状況では、MovieClip._url プロパティを引数として、このメソッドに使用できます。たとえば、SWF ファイルを my_mc にロードした場合は、System.security.allowDomain(my_mc._url) を呼び出すことができます。これを行った場合は、my_mc の SWF ファイルのロードが開始されるまで待ってください。これは、まだ _url プロパティに最終的な正しい値が入力されていないためです。子 SWF ファイルのロードがいつ開始されたかを確認するには、MovieClipLoader.onLoadStart を使用します。

この反対の状況が発生する場合もあります。つまり、親 SWF ファイルにスクリプトを許可する子 SWF ファイルを作成したものの、親 SWF ファイルのドメインがどれになるかが不明な場合です。つまり、その SWF ファイルはさまざまなドメインからロードされる可能性があるということになります。こうした状況では、子 SWF ファイルから System.security.allowDomain(_parent._url) を呼び出します。親 SWF ファイルは子 SWF ファイルより前にロードされるため、親 SWF ファイルがロードされるまで待つ必要はありません。

メモ

 

アクセス先のインターネット SWF ファイルが HTTPS URL からロードされる場合は、そのインターネット SWF ファイルで System.security.allowInsecureDomain("*") を呼び出す必要があります。

次の表は、各種バージョンの Flash Player におけるドメイン一致規則をまとめたものです。

Flash Player 用にパブリッシュされたファイル

SWF ファイル間のクロスドメインアクセス (allowDomain() が必要)

SWF ファイル間のサブドメインアクセス

5 以前

制限なし

制限なし

6

スーパードメイン一致 : スーパードメインが一致しない場合、allowDomain() が必要になります。

制限なし

7 以降

ドメイン完全一致

HTTPS でホストされたファイルから HTTP または FTP でホストされたファイルにアクセスするための明示的許可

ドメイン完全一致

HTTPS でホストされたファイルから HTTP または FTP でホストされたファイルにアクセスするための明示的許可

メモ

 

Flash Player 7 以降でHTTP-to-HTTPS アクセスを実行する場合は、ドメインが完全に一致しても、System.security.allowInsecureDomain が必要です。

Flash Player の動作を制御するバージョンは、Flash Player 自身のバージョンでなく、SWF バージョン (SWF ファイルの指定 Flash Player バージョン) です。たとえば、Flash Player 8 以降でバージョン 7 用にパブリッシュされた SWF ファイルを再生する場合、バージョン 7 と一貫した動作が適用されます。これによって、アップグレードしても、展開された SWF ファイル内の System.security.allowDomain() の動作は変更されなくなります。

Flash Player 7 以降では、スーパードメイン一致規則ではなくドメイン完全一致規則が使用されるため、Flash Player 7 以降用にパブリッシュされたファイルから既存のスクリプトにアクセスするには、既存のスクリプトを修正する必要があります。修正したファイルを Flash Player 6 用にパブリッシュすることは可能です。ファイル内で LocalConnection.allowDomain() ステートメントまたは System.security.allowDomain() ステートメントが使用され、許可対象としてスーパードメインサイトが指定されている場合は、パラメータを変更して、代わりにドメインを直接指定する必要があります。次の例は、Flash Player 6 コードの場合に実行しなければならない変更内容を示しています。

// www.helpexamples.com の SWF ファイルに Flash Player 6 コマンドを指定 
// www.adobe.com または store.adobe.com でホストされた
// SWF ファイルからのアクセスを許可する
System.security.allowDomain("adobe.com");
my_lc.allowDomain = function(sendingDomain) {    
    return(sendingDomain=="adobe.com");
}
// Flash Player 7 以降用にパブリッシュされた SWF ファイル
// によるアクセスを許可するコマンド
System.security.allowDomain("www.adobe.com", "store.adobe.com");
my_lc.allowDomain = function(sendingDomain) {    
    return(sendingDomain=="www.adobe.com" ||
        sendingDomain=="store.adobe.com");
}

このようなステートメントを、現在使用していないファイルにも追加することが必要になる場合があります。たとえば、SWF ファイルが www.adobe.com でホストされていて、store.adobe.com にある Flash Player 7 以降用にパブリッシュされた SWF ファイルからのアクセスを許可する場合、www.adobe.com にあるアクセス対象のファイルに次のようなステートメントを追加する必要があります。ただし、このファイルは引き続き Flash Player 6 用にパブリッシュできます。

System.security.allowDomain("store.adobe.com");
my_lc.allowDomain = function(sendingDomain) {    
    return(sendingDomain=="store.adobe.com");
}

また、Flash Player 6 アプリケーションを Flash Player 7 で実行する場合、ドメインが完全に一致しないデータにアプリケーションがアクセスしようとすると、Flash Player 7 以降のドメイン一致規則が適用され、ユーザーはアクセスの許可または拒否を選択するよう求められます。

つまり、次の条件を満たすファイルを Flash Player 7 以降用にパブリッシュする場合は、allowDomain ステートメントを追加または変更する必要があります。

次のように変更する必要があります。

ローカルセキュリティサンドボックスについては、ローカルファイルセキュリティ と Flash Player についてを参照してください。


 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート

現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00001082.html