Cross-Scripting



Wenn zwei mit ActionScript 3.0 geschriebene SWF-Dateien von derselben Domäne bereitgestellt werden, z. B. lautet die URL für eine SWF-Datei „http://www.example.com/swfA.swf“ und die URL für die andere „http://www.example.com/swfB.swf“, kann eine SWF-Datei Variablen, Objekte, Eigenschaften, Methoden usw. in der anderen Datei untersuchen und ändern, und umgekehrt. Dies wird als Cross-Scripting bezeichnet.

Cross-Scripting zwischen AVM1 SWF-Dateien und AVM2 SWF-Dateien wird nicht unterstützt. Eine AVM1 SWF-Datei ist eine in ActionScript 1.0 oder 2.0 geschriebene SWF-Datei. (AVM1 und AVM2 beziehen sich auf ActionScript Virtual Machine.) Sie können jedoch die LocalConnection-Klasse für den Datenaustausch zwischen AVM1 und AVM2 verwenden.

Wenn zwei in ActionScript 3.0 geschriebene SWF-Dateien aus verschiedenen Domänen bereitgestellt werden, z. B. „http://siteA.com/swfA.swf“ und „http://siteB.com/siteB.swf“, können „swfA.swf“ und „swfB.swf“ in Flash Player standardmäßig kein Cross-Scripting durchführen. Eine SWF-Datei erteilt SWF-Dateien aus anderen Domänen Berechtigungen durch Aufrufen von Security.allowDomain(). Durch Aufrufen von Security.allowDomain("siteA.com") gewährt „swfB.swf“ SWF-Dateien von „siteA.com“ eine Berechtigung für den Skriptzugriff.

In domänenübergreifenden Situationen ist es wichtig, die beiden Seiten klar zu trennen. In der vorliegenden Erläuterung soll die Seite, die das Cross-Scripting durchführt, als zugreifende Seite (normalerweise die zugreifende SWF-Datei) und die andere Seite als die Seite, auf die zugegriffen wird (normalerweise die SWF-Datei, auf die zugegriffen wird) bezeichnet werden. Wenn „siteA.swf“ einen Skriptzugriff auf „siteB.swf“ durchführt, handelt es sich bei „siteA.swf“ um die zugreifende Seite und bei „siteB.swf“ um die Seite, auf die zugegriffen wird. Dies wird in der folgenden Abbildung verdeutlicht:

Domänenübergreifende Zugriffsrechte, die mit Security.allowDomain() erstellt wurden, sind asymmetrisch. Im vorangegangenen Beispiel kann „siteA.swf“ einen Skriptzugriff auf „siteB.swf“ durchführen, „siteB.swf“ jedoch nicht auf „siteA.swf“, da „siteA.swf“ nicht die Methode Security.allowDomain() aufgerufen hat, um SWF-Dateien auf „siteB.com“ die Berechtigung zum Skriptzugriff zu erteilen. Symmetrische Zugriffsrechte werden eingerichtet, indem beide SWF-Dateien die Methode Security.allowDomain() aufrufen.

Flash Player schützt SWF-Dateien nicht nur vor Cross-Domain-Scripting durch andere SWF-Dateien, sondern auch vor Cross-Domain-Scripting durch HTML-Dateien. HTML-zu-SWF-Scripting kann bei Rückrufen auftreten, die mit der ExternalInterface.addCallback()-Methode hergestellt wurden. Bei domänenübergreifendem HTML-zu-SWF-Skriptzugriff muss die SWF-Datei, auf die zugegriffen wird, Security.allowDomain() aufrufen, so als ob es sich bei der zugreifenden Seite um eine SWF-Datei handelt, andernfalls schlägt der Vorgang fehl. Weitere Informationen finden Sie unter Kontrolloptionen für Autoren (Entwickler).

Darüber hinaus stellt Flash Player Sicherheitskontrollen für das SWF-zu-HTML-Scripting zur Verfügung. Weitere Informationen finden Sie unter Steuern des externen URL-Zugriffs.

Sicherheit der Bühne

Einige Eigenschaften und Methoden des Stage-Objekts stehen allen Sprites oder Movieclips in der Anzeigeliste zur Verfügung.

Das Stage-Objekt verfügt jedoch über einen Eigentümer: die erste geladene SWF-Datei. Standardmäßig stehen die folgenden Eigenschaften und Methoden des Stage-Objekts nur den SWF-Dateien in der gleichen Sicherheits-Sandbox wie der des Bühneneigentümers zur Verfügung:

Eigenschaften

Methoden

align

addChild()

displayState

addChildAt()

frameRate

addEventListener()

height

dispatchEvent()

mouseChildren

hasEventListener()

numChildren

setChildIndex()

quality

willTrigger()

scaleMode

 

showDefaultContextMenu

 

stageFocusRect

 

stageHeight

 

stageWidth

 

tabChildren

 

textSnapshot

 

width

 

Damit eine SWF-Datei in einer anderen Sandbox als der des Bühneneigentümers auf diese Eigenschaften und Methoden zugreifen kann, muss die SWF-Datei des Bühneneigentümers die Methode Security.allowDomain() aufrufen, um der Domäne in der externen Sandbox Zugriffsrechte zu erteilen. Weitere Informationen finden Sie unter Kontrolloptionen für Autoren (Entwickler).

Die Eigenschaft frameRate ist ein Sonderfall. Sie kann von jeder SWF-Datei gelesen werden. Jedoch können nur die SWF-Dateien in der Sicherheits-Sandbox des Bühneneigentümers (oder SWF-Dateien, denen durch einen Aufruf der Methode Security.allowDomain() entsprechende Zugriffsrechte erteilt wurden) diese Eigenschaft ändern.

Darüber hinaus gibt es einige Einschränkungen bei den Methoden removeChildAt() und swapChildrenAt() des Stage-Objekts, die sich von den anderen Einschränkungen unterscheiden. Code zum Aufrufen dieser Methoden muss sich in der gleichen Domäne wie der Eigentümer der betroffenen untergeordneten Objekte befinden (und nicht in der gleichen Domäne wie der Bühneneigentümer), oder die untergeordneten Objekte können die Methode Security.allowDomain() aufrufen.

Durchlaufen der Anzeigeliste

Die Fähigkeit einer SWF-Datei, auf Anzeigeobjekte zuzugreifen, die aus anderen Sandboxen geladen werden, ist eingeschränkt. Damit eine SWF-Datei auf ein Anzeigeobjekt zugreifen kann, das von einer SWF-Datei in einer anderen Sandbox erstellt wurde, muss die SWF-Datei, auf die zugegriffen wird, die Methode Security.allowDomain() aufrufen, um den Zugriff durch die Domäne der zugreifenden SWF-Datei zu gestatten. Weitere Informationen finden Sie unter Kontrolloptionen für Autoren (Entwickler).

Um auf ein Bitmap-Objekt zuzugreifen, das von einem Loader-Objekt geladen wurde, muss eine URL-Richtliniendatei auf dem Ursprungsserver der Bilddatei vorhanden sein und diese Richtliniendatei muss der Domäne der SWF-Datei, die auf das Bitmap-Objekt zuzugreifen versucht, Zugriffsrechte erteilen (siehe Kontrolloptionen für Websites (Richtliniendateien)).

Das LoaderInfo-Objekt, das einer geladenen Datei entspricht (und dem Loader-Objekt), enthält die folgenden drei Eigenschaften, mit denen die Beziehung zwischen dem geladenen Objekt und dem Loader-Objekt definiert wird: childAllowsParent, parentAllowsChild und sameDomain.

Sicherheit von Ereignissen

Für den Zugriff auf anzeigelistenbezogene Ereignisse bestehen Einschränkungen, die auf der Sandbox des Anzeigeobjekts basieren, welches das Ereignis auslöst. Ein Ereignis in der Anzeigeliste durchläuft eine Aufstiegs- und eine Empfangsphase (siehe Beschreibung in Verarbeiten von Ereignissen). Während der Aufstiegs- und Empfangsphasen migriert ein Ereignis vom Quell-Anzeigeobjekt über die übergeordneten Anzeigeobjekte in der Anzeigeliste. Befindet sich ein übergeordnetes Objekt in einer anderen Sicherheits-Sandbox als das Quell-Anzeigeobjekt, stoppen Empfangs- und Aufstiegsphase unter diesem übergeordneten Objekt, es sei denn, es besteht ein gegenseitiges Vertrauensverhältnis zwischen dem Eigentümer des übergeordneten Objekts und dem Eigentümer des Quellobjekts. Dieses gegenseitige Vertrauensverhältnis wird folgendermaßen erreicht:

  1. Die SWF-Datei, die Eigentümer des übergeordneten Objekts ist, muss die Methode Security.allowDomain() aufrufen, um der Domäne der SWF-Datei zu vertrauen, die Eigentümer des Quellobjekts ist.

  2. Die SWF-Datei, die Eigentümer des Quellobjekts ist, muss die Methode Security.allowDomain() aufrufen, um der Domäne der SWF-Datei zu vertrauen, die Eigentümer des übergeordneten Objekts ist.

Das LoaderInfo-Objekt, das einer geladenen Datei entspricht (und dem Loader-Objekt), enthält die folgenden zwei Eigenschaften, mit denen die Beziehung zwischen dem geladenen Objekt und dem Loader-Objekt definiert wird: childAllowsParent und parentAllowsChild.

Für Ereignisse, die von anderen Objekten als Anzeigeobjekten ausgelöst werden, gibt es keine Sicherheitsprüfungen oder sicherheitsbezogene Auswirkungen.