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:
-
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.
-
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.