Cross-Scripting
Flash Player 9 und höher, Adobe AIR 1.0 und höher
Wenn zwei mit ActionScript 3.0 geschriebene SWF-Dateien oder zwei in AIR ausgeführte HTML-Dateien von derselben Domäne bereitgestellt werden (beispielsweise lautet die URL für eine SWF-Datei „http://www.example.com/swfA.swf“ und für die andere „http://www.example.com/swfB.swf“), kann der in einer Datei definierte Code die Variablen, Objekte, Eigenschaften, Methoden usw. der anderen Datei untersuchen und ändern und umgekehrt. Dies wird als
Cross-Scripting
bezeichnet.
Werden die beiden Dateien von verschiedenen Domänen bereitgestellt (beispielsweise „http://siteA.com/swfA.swf“ und „http://siteB.com/swfB.swf“), ist es standardmäßig in Flash Player und AIR nicht möglich, dass „swfA.swf“ eine Skripterstellung für „swfB.swf“ durchführt und umgekehrt. Eine SWF-Datei erteilt SWF-Dateien von 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.
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.
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
frameRate
-Eigenschaft ist ein Sonderfall, da die
frameRate
-Eigenschaft von jeder SWF-Datei gelesen werden kann. 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:
-
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.
-
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.
|
|
|
|
|