Cross-scripting

Flash Player 9 of hoger, Adobe AIR 1.0 of hoger

Als twee SWF-bestanden die met ActionScript 3.0 zijn geschreven of twee HTML-bestanden die in AIR worden uitgevoerd, afkomstig zijn uit hetzelfde domein (bijvoorbeeld de URL voor het ene SWF-bestand is http://www.example.com/swfA.swf en voor het andere http://www.example.com/swfB.swf), kan code die in het ene bestand is gedefinieerd variabelen, objecten, eigenschappen, methoden enzovoort in het andere bestand lezen en wijzigen en vice versa. Dit wordt cross-scripting genoemd.

Als de twee bestanden afkomstig zijn uit verschillende domeinen (bijvoorbeeld http://siteA.com/swfA.swf en http://siteB.com/swfB.swf) geven Flash Player en AIR standaard geen toestemming aan swfA.swf om scriptbewerkingen uit te voeren op swfB.swf en ook niet aan swfB.swf om scriptbewerkingen uit te voeren op swfA.swf. Een SWF-bestand geeft toestemming aan SWF-bestanden in andere domeinen door Security.allowDomain() aan te roepen. Door Security.allowDomain("siteA.com") aan te roepen geeft swfB.swf toestemming aan SWF-bestanden van siteA.com om scriptbewerkingen uit te voeren op swfB.swf.

Cross-scripting wordt niet ondersteund tussen AVM1 SWF-bestanden en AVM2 SWF-bestanden. Een AVM1 SWF-bestand is gemaakt met ActionScript 1.0 of ActionScript 2.0. (AVM1 en AVM2 verwijzen naar de virtuele ActionScript-machine.) U kunt echter de klasse LocalConnection gebruiken om gegevens tussen AVM1 en AVM2 te verzenden.

In elke interdomeinsituatie is het belangrijk om duidelijk te zijn over de rol van de twee betrokken partijen. De partij die cross-scripting uitvoert, wordt de benaderende partij genoemd (doorgaans het benaderende SWF-bestand) en de andere partij wordt de benaderde partij genoemd (doorgaans het SWF-bestand dat wordt geopend). Als siteA.swf scriptbewerkingen uitvoert op siteB.swf, is siteA.swf de benaderende partij en siteB.swf de benaderde partij, zoals in de volgende afbeelding wordt getoond:

Interdomeinbevoegdheden die met Security.allowDomain() worden ingesteld, zijn asymmetrisch. In het vorige voorbeeld kan siteA.swf scriptbewerkingen uitvoeren op siteB.swf, maar niet andersom, omdat siteA.swf de methode Security.allowDomain() niet heeft aangeroepen om SWF-bestanden op siteB.com toestemming te geven scriptbewerkingen op siteA.swf uit te voeren. U kunt symmetrische bevoegdheden instellen door beide SWF-bestanden de methode Security.allowDomain() te laten aanroepen.

Naast het beveiligen van SWF-bestanden tegen interdomein-scripting door andere SWF-bestanden, beveiligt Flash Player SWF-bestanden tegen interdomein-scripting door HTML-bestanden. HTML-naar-SWF-scriptbewerkingen kunnen optreden met callback-bewerkingen door de methode ExternalInterface.addCallback(). Wanneer HTML-naar-SWF-scriptbewerkingen in verschillende domeinen worden uitgevoerd, moet het SWF-bestand dat wordt benaderd de methode Security.allowDomain() aanroepen, net als wanneer de benaderende partij een SWF-bestand is, anders mislukt de bewerking. Zie Controlemiddelen voor auteurs (ontwikkelaars) voor meer informatie.

Flash Player biedt ook beveiligingscontroles voor SWF-naar-HTML-scriptbewerkingen. Zie Uitgaande URL-toegang beheren voor meer informatie.

werkgebied, beveiliging

Sommige eigenschappen en methoden van het object Stage zijn beschikbaar voor elke sprite of filmclip in het weergaveoverzicht.

Het object Stage heeft echter een eigenaar: het eerste geladen SWF-bestand. De volgende eigenschappen en methoden van het object Stage zijn standaard alleen beschikbaar voor SWF-bestanden die zich in dezelfde beveiligingssandbox bevinden als de eigenaar van het werkgebied:

Eigenschappen

Methoden

uitlijnen

addChild()

displayState

addChildAt()

frameRate

addEventListener()

height

dispatchEvent()

mouseChildren

hasEventListener()

numChildren

setChildIndex()

kwaliteit

willTrigger()

scaleMode

 

showDefaultContextMenu

 

stageFocusRect

 

stageHeight

 

stageWidth

 

tabChildren

 

textSnapshot

 

width

 

Als een SWF-bestand dat zich in een andere sandbox bevindt als de eigenaar van het werkgebied, toegang wil verkrijgen tot deze eigenschappen en methoden, moet het SWF-bestand van de eigenaar van het werkgebied de methode Security.allowDomain() aanroepen om het domein van de externe sandbox toe te staan. Zie Controlemiddelen voor auteurs (ontwikkelaars) voor meer informatie.

De eigenschap frameRate is een speciaal geval: elk SWF-bestand kan de eigenschap frameRate lezen. Alleen de bestanden in de beveiligingssandbox van de eigenaar van het werkgebied (of bestanden die bevoegdheden hebben verkregen via het aanroepen van de methode Security.allowDomain()) kunnen de eigenschap echter wijzigen.

Er bestaan ook beperkingen voor de methoden removeChildAt() en swapChildrenAt() van het object Stage, maar deze zijn anders dan de andere beperkingen. Om deze methoden aan te kunnen roepen, moet deze code zich ofwel in hetzelfde domein bevinden als de eigenaar van de betreffende onderliggende object(en) (in plaats van in hetzelfde domein als de eigenaar van het werkgebied), ofwel moet de methode Security.allowDomain() door de betreffende objecten worden aangeroepen.

Het weergaveoverzicht doorlopen

Een SWF-bestand heeft beperkte mogelijkheden om toegang te krijgen tot weergaveobjecten die zijn geladen uit andere sandboxen. Een SWF-bestand heeft alleen toegang tot een weergaveobject dat door een ander SWF-bestand in een andere sandbox is gemaakt als het benaderde SWF-bestand de methode Security.allowDomain() aanroept om het domein van het SWF-bestand dat het object wil gebruiken toegang te bieden. Zie Controlemiddelen voor auteurs (ontwikkelaars) voor meer informatie.

Toegang tot een object Bitmap dat is geladen door een object Loader is alleen mogelijk als er op de oorspronkelijke server van het afbeeldingsbestand een bestand met interdomeinbeleid is gedefinieerd en in dit bestand toestemming wordt verleend aan het domein van het SWF-bestand dat het object Bitmap wil gebruiken (zie Controlemiddelen voor websites (beleidsbestanden)).

Het object LoaderInfo dat overeenkomt met een geladen bestand (en met het object Loader) bevat de volgende drie eigenschappen, die bepalend zijn voor de relatie tussen het geladen object en het object Loader: childAllowsParent, parentAllowsChild en sameDomain.

Gebeurtenisbeveiliging

Er gelden beveiligingsbeperkingen voor de toegang tot gebeurtenissen die betrekking hebben op het weergaveoverzicht. Deze beperkingen zijn gebaseerd op de sandbox van het weergaveobject dat de gebeurtenis verzendt. Een gebeurtenis in het weergaveoverzicht heeft vastleg- en terugkoppelfasen (zie Gebeurtenissen afhandelen). Tijdens de vastleg- en terugkoppelfasen beweegt een gebeurtenis zich vanaf het bronweergaveobject langs bovenliggende weergaveobjecten in het weergaveoverzicht. Als een bovenliggend object zich bevindt in een andere beveiligingssandbox dan het bronweergaveobject, stopt de vastleg- en terugkoppelfase onder dat bovenliggende object, tenzij er een vertrouwensrelatie bestaat tussen de eigenaar van het bovenliggende object en die van het bronobject. Deze vertrouwensrelatie kan op de volgende manieren tot stand worden gebracht:

  1. Het SWF-bestand dat eigenaar is van het bovenliggende object roept de methode Security.allowDomain() aan om het domein van het SWF-bestand dat eigenaar is van het bronobject toegang te verlenen.

  2. Het SWF-bestand dat eigenaar is van het bronobject roept de methode Security.allowDomain() aan om het domein van het SWF-bestand dat eigenaar is van het bovenliggende object toegang te verlenen.

Het object LoaderInfo dat overeenkomt met een geladen bestand (en met het object Loader) bevat de volgende twee eigenschappen, die bepalend zijn voor de relatie tussen het geladen object en het object Loader: childAllowsParent en parentAllowsChild.

Voor gebeurtenissen die worden verzonden vanuit andere objecten dan weergaveobjecten worden geen beveiligingscontroles uitgevoerd en zijn ook geen andere beveiligingbeperkingen van toepassing.