ActionScript 3.0 で記述された 2 つの SWF ファイルが同じドメインに所属している場合(例えば、一方の SWF ファイルの URL が http://www.example.com/swfA.swf、もう一方の URL が http://www.example.com/swfB.swf である場合)、一方の 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/siteB.swf)、デフォルトでは、swfA.swf で swfB.swf をスクリプトすることも、swfB.swf で swfA.swf をスクリプトすることも許可されません。Security.allowDomain() を呼び出すことで、SWF ファイルによって他のドメインの SWF ファイルに許可を与えます。swfB.swf は Security.allowDomain("siteA.com") を呼び出すことにより、siteA.com からの SWF ファイルに swfB.swf をスクリプトする許可を与えます。
クロスドメインの場合は、関与する 2 つのドメインを明確にすることが重要です。説明のため、ここでは、クロススクリプトを実行する側を「アクセス元」(通常、アクセスする SWF)と呼び、他を「アクセス先」(通常、アクセスされる SWF)と呼びます。次の図に示すように、siteA.swf が siteB.swf をスクリプトする場合、siteA.swf がアクセス元で、siteB.swf がアクセス先です。
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 プロパティを読み取ることができます。しかし、このプロパティを変更できるのは、ステージ所有者のセキュリティサンドボックスに入っている SWF ファイル、または Security.allowDomain() メソッドの呼び出しによって許可を付与された SWF ファイルだけです。
Stage オブジェクトの removeChildAt() メソッドおよび swapChildrenAt() メソッドについての制限もありますが、それらは他の制限と異なっています。これらのメソッドを呼び出すためには、影響を受ける子オブジェクトの所有者と同じドメイン内にコードがあることが必要です(ステージ所有者と同じドメイン内にあることではありません)。または、子オブジェクトが Security.allowDomain() メソッドを呼び出すこともできます。
SWF ファイルから他のサンドボックスからロードされた表示オブジェクトにアクセスする機能は制限されます。SWF ファイルが別のサンドボックス内にある別の SWF ファイルによって作成された表示オブジェクトにアクセスするには、アクセスされる側の SWF ファイルが Security.allowDomain() メソッドを呼び出し、アクセスする側の SWF ファイルのドメインによるアクセスを許可する必要があります。詳細については、作成者(開発者)の管理を参照してください。
Loader オブジェクトによってロードされた Bitmap オブジェクトにアクセスするには、イメージファイルのオリジンサーバー上にクロスドメインポリシーファイルが存在する必要があり、そのクロスドメインポリシーファイルが、Bitmap オブジェクトにアクセスを試みている SWF ファイルのドメインに許可を付与する必要があります(Web サイトの管理(クロスドメインポリシーファイル)参照)。
ロードされたファイル(および Loader オブジェクト)に対応する LoaderInfo オブジェクトは、次の 3 つのプロパティが含まれており、これらのプロパティはロードされたオブジェクトと Loader オブジェクト間の関係を定義します。childAllowsParent、parentAllowsChild および sameDomain。
表示オブジェクトに関連するイベントには、イベントを送出する表示オブジェクトのサンドボックスに基づくセキュリティアクセスの制限があります。表示リスト内のイベントには、バブリングおよびキャプチャ段階があります(イベントの処理参照)。バブリングおよびキャプチャ段階では、イベントは表示リスト内のソース表示オブジェクトから親表示オブジェクトに移行します。親オブジェクトがソースの表示オブジェクトと異なるセキュリティサンドボックス内にある場合、キャプチャおよびバブリング段階はその親オブジェクトの下で停止します。ただし、親オブジェクトの所有者とソースオブジェクトの所有者の間に相互の信頼関係がある場合は除きます。この相互の信頼関係は、次のようにして達成できます。
ロードされたファイル(および Loader オブジェクト)に対応する LoaderInfo オブジェクトは、2 つのプロパティ(childAllowsParent および parentAllowsChild)が含まれており、これらのプロパティはロードされるオブジェクトと Loader オブジェクト間の関係を定義します。
表示オブジェクト以外のオブジェクトから送出されたイベントの場合、セキュリティチェックやセキュリティ関連の影響はありません。
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート