クロススクリプト

ActionScript 3.0 で記述された 2 つの SWF ファイルが同じドメインに所属している場合、たとえば、1 つの SWF ファイルの URL が http://www.example.com/swfA.swf、もう 1 つの SWF ファイルの URL が http://www.example.com/swfB.swf である場合、片方の SWF ファイルはもう一方の変数、オブジェクト、プロパティ、メソッドなどを検査および変更でき、その逆も可能です。これを "クロスドメインスクリプト" と呼びます。

AVM1 SWF ファイルと AVM2 SWF ファイル間でのクロススクリプトはサポートされません。AVM1 SWF ファイルは、ActionScript 1.0 または ActionScript 2.0 を使用して作成されたファイルです。AVM1 および AVM2 は、ActionScript 仮想マシンを意味します。しかし、LocalConnection クラスを使用すると、AVM1 と AVM2 間でデータを送信できます。

ActionScript 3.0 で記述された 2 つの SWF ファイルが異なるドメインに所属している場合 (たとえば、http://siteA.com/swfA.swf および http://siteB.com/swfB.swf)、デフォルトでは、swfA.swf で swfB.swf をスクリプトすることも、swfB.swf で swfA.swf をスクリプトすることも許可されません。Security.allowDomain() を呼び出すことで、SWF ファイルで他のドメインの SWF ファイルをスクリプトすることが許可されます。Security.allowDomain("siteA.com") を呼び出すことで、swfB.swf での siteA.com の SWF ファイルのスクリプト許可が付与されます。

クロスドメインの場合は、関与する 2 つのドメインを明確にすることが重要です。説明のため、ここでは、クロススクリプトを実行する側を "アクセス元" (通常、アクセスする SWF) と呼び、他を "アクセス先" (通常、アクセスされる SWF) と呼びます。次の図に示すように、siteA.swf が siteB.swf をスクリプトする場合、siteA.swf がアクセス元で、siteB.swf がアクセス先です。


仮想コンテンツロードシナリオを示す図: siteA.com/swfA.swf は siteB.com/swfB.swf をロードし、swfB は、swfA.swf が swfB.swf とクロススクリプトできるように、Security.allowDomain() を使用して siteA.com に許可を与えます。

Security.allowDomain() メソッドを使用して確立されるクロスドメイン許可は非対称です。前の例では、siteA.swf は siteB.swf をスクリプトできますが、siteB.swf は siteA.swf をスクリプトできません。siteA.swf で、siteB.com の SWF ファイルに siteA.swf をスクリプトする許可を与えるための Security.allowDomain() メソッドを呼び出していないためです。対称的な許可を設定するには、両方の SWF ファイルで Security.allowDomain() メソッドを呼び出します。

Flash Player では、SWF ファイルを他の SWF ファイルによるクロスドメインスクリプトから保護するだけでなく、HTML ファイルによるクロスドメインスクリプトからも保護します。HTML から SWF へのスクリプトは、ExternalInterface.addCallback() メソッドを通じて確立されたコールバックで発生させることができます。HTML から SWF へのスクリプトがドメインを越える場合、アクセス先 SWF ファイルは、アクセス元が SWF ファイルの場合と同様に、Security.allowDomain() メソッドを呼び出す必要があります。さもなければ、操作は失敗します。詳細については、作成者 (開発者) コントロールを参照してください。

また、Flash Player は SWF から HTML へのスクリプトのセキュリティ管理も行います。詳細については、ホスト Web ページのスクリプトへのアクセスの制御を参照してください。

サブトピック

ステージのセキュリティ
表示リスト内の移動
イベントセキュリティ

ステージのセキュリティ

Stage オブジェクトの一部のプロパティとメソッドは、表示リストのスプライトやムービークリップで使用できます。

しかし、Stage オブジェクトには所有者があるといいます。つまり、ロードされた最初の SWF ファイルです。デフォルトでは、Stage オブジェクトの次のプロパティおよびメソッドは、ステージ所有者と同じセキュリティサンドボックス内の SWF ファイルでのみ使用できます。

プロパティ

メソッド

align

showDefaultContextMenu

addChild()

displayState

stageFocusRect

addChildAt()

frameRate

stageHeight

addEventListener()

height

stageWidth

dispatchEvent()

mouseChildren

tabChildren

hasEventListener()

numChildren

textSnapshot

setChildIndex()

quality

width

willTrigger()

scaleMode

 

 

ステージ所有者のサンドボックス以外のサンドボックス内の SWF ファイルが上記のプロパティおよびメソッドにアクセスするには、ステージ所有者の SWF ファイルは、Security.allowDomain() メソッドを呼び出して、外部サンドボックスのドメインを許可する必要があります。詳細については、作成者 (開発者) コントロールを参照してください。

frameRate プロパティは特殊なケースです。SWF ファイルはすべて frameRate プロパティを読み出すことができます。しかし、このプロパティを変更できるのは、ステージ所有者のサンドボックスに入っているか、Security.allowDomain() メソッドの呼び出しによって許可を付与された SWF ファイルだけです。

Stage オブジェクトの removeChildAt() および swapChildrenAt() メソッドについての制限もありますが、それらは他の制限と異なっています。これらのメソッドを呼び出すには、ステージ所有者と同じドメイン内にあることが必要なのではなく、コードが、影響を受ける子オブジェクトの所有者と同じドメイン内にあることが必要です。あるいは、子オブジェクトは Security.allowDomain() メソッドを呼び出すことができます。

表示リスト内の移動

SWF ファイルから他のサンドボックスからロードされた表示オブジェクトにアクセスする機能は制限されます。SWF ファイルが別のサンドボックス内にある別の SWF ファイルによって作成された表示オブジェクトにアクセスするには、アクセスされる側の SWF ファイルが Security.allowDomain() メソッドを呼び出し、アクセスする側の SWF ファイルのドメインによるアクセスを許可する必要があります。詳細については、作成者 (開発者) コントロールを参照してください。

Loader オブジェクトでロードされた Bitmap オブジェクトにアクセスするには、クロスドメインポリシーファイルはイメージファイルのオリジンサーバー上に存在する必要があり、そのクロスドメインポリシーファイルは、SWF ファイルのドメインに、Bitmap オブジェクトへのアクセスを試みる許可を付与する必要があります (Web サイトの管理 (クロスドメインポリシーファイル)を参照)。

ロードされたファイル (および Loader オブジェクト) に対応する LoaderInfo オブジェクトは、次の 3 つのプロパティを含んでおり、これらのプロパティはロードされたオブジェクトと Loader オブジェクト (childAllowsParentparentAllowsChild、および sameDomain) の間の関係を定義します。

イベントセキュリティ

表示オブジェクトに関連するイベントには、イベントを送出する表示オブジェクトのサンドボックスに基づくセキュリティアクセスの制限があります。表示リストのイベントは、バブリング段階とキャプチャ段階に分けられます (イベントの処理で説明)。バブリングおよびキャプチャ段階では、イベントは表示リスト内のソース表示オブジェクトから親表示オブジェクトに移行します。親オブジェクトがソースの表示オブジェクトと異なるセキュリティサンドボックス内にある場合、キャプチャおよびバブリング段階はその親オブジェクトの下で停止します。ただし、親オブジェクトの所有者とソースオブジェクトの所有者の間に相互の信頼関係がある場合は除きます。この相互の信頼関係は、次のようにして達成できます。

  1. 親オブジェクトを所有する SWF ファイルは、ソースオブジェクトを所有する SWF ファイルのドメインを信頼するために、Security.allowDomain() メソッドを呼び出す必要があります。
  2. ソースオブジェクトを所有する SWF ファイルは、Security.allowDomain() メソッドを呼び出して、親オブジェクトを所有する SWF ファイルのドメインを信頼する必要があります。

ロードされたファイル (および Loader オブジェクト) に対応する LoaderInfo オブジェクトは、次の 3 つのプロパティを含んでおり、これらのプロパティはロードされたオブジェクトと Loader オブジェクト (childAllowsParent および parentAllowsChild) の間の関係を定義します。

表示オブジェクト以外のオブジェクトから送出されたイベントの場合、セキュリティチェックやセキュリティ関連の影響はありません。


 

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

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