Om två SWF-filer som är skrivna med ActionScript 3.0, eller två HTML-filer som körs i AIR opereras från samma domän, där URL:en för den ena SWF-filen till exempel är http://www.example.com/swfA.swf och för den andra http://www.example.com/swfB.swf, kan kod som definieras i den ena filen undersöka och ändra variabler, objekt, egenskaper, metoder o.s.v. i den andra och vice versa. Detta kallas
korsskriptning
.
De två filerna kan också opereras från olika domäner, till exempel http://siteA.com/swfA.swf och http://siteB.com/swfB.swf. I sådana fall är standard att Flash Player och AIR inte tillåter att swfA.swf skriptar swfB.swf, eller att swfB.swf skriptar swfA.swf. En SWF-fil ger SWF-filer från andra domäner behörighet genom att anropa
Security.allowDomain()
. Genom att anropa
Security.allowDomain("siteA.com")
ger siteB.swf SWF-filer från siteA.swf behörighet att skripta den.
Korsskriptning används inte mellan AVM1 SWF- och AVM2 SWF-filer. En AVM1 SWF-fil har skapats med ActionScript 1.0 eller ActionScript 2.0. (AVM1 och AVM2 betyder ActionScript Virtual Machine.) Däremot kan du använda klassen LocalConnection för att skicka data mellan AVM1 och AVM2.
I alla korsdomänssituationer är det viktigt att veta vilken sida som är vilken. I beskrivningarna kommer sidan som utför korsskriptningen att kallas
den anslutande parten
(vanligtvis den anslutande SWF-filen) och den andra sidan kallas
målparten
(vanligtvis SWF-målfilen). När siteA.swf skriptar siteB.swf är siteA.swf den anslutande parten och siteB.swf målparten, som illustreras här:
Korsdomänbehörigheter som upprättas med metoden
Security.allowDomain()
är asymmetriska. I föregående exempel kan siteA.swf skripta siteB.swf, men siteB.swf kan inte skripta siteA.swf eftersom siteA.swf inte har anropat metoden
Security.allowDomain()
för att ge SWF-filer på siteB.com behörighet att skripta den. Du kan ange symmetrisk behörighet genom att låta båda SWF-filerna anropa metoden
Security.allowDomain()
.
Flash Player skyddar SWF-filer från korsdomänsskriptning från andra SWF-filer och från korsdomänsskriptning från HTML-filer. HTML-till-SWF-skriptning kan utföras med återkopplingar (callback) som upprättats via metoden
ExternalInterface.addCallback()
. När skriptning från HTML till SWF går över domäner, måste SWF-målfilen anropa metoden
Security.allowDomain()
, precis som när den anslutande parten är en SWF-fil, annars misslyckas åtgärden. Mer information finns i
Författarinställningar (för utvecklare)
.
I Flash Player finns dessutom säkerhetskontroller för SWF-till-HTML-skriptning. Mer information finns i
Kontrollera utgående URL-åtkomst
.
Scen, säkerhet
Vissa egenskaper och metoder i objektet Stage kan användas med Sprite- eller MovieClip-objekt i visningslistan.
Objektet Stage har däremot en ägare: den först inlästa SWF-filen. Följande egenskaper och metoder i objektet Stage är som standard endast tillgängliga för SWF-filer i samma säkerhetssandlåda, som är objektsägare:
Egenskaper
|
Metoder
|
align
|
addChild()
|
displayState
|
addChildAt()
|
frameRate
|
addEventListener()
|
height
|
dispatchEvent()
|
mouseChildren
|
hasEventListener()
|
numChildren
|
setChildIndex()
|
quality
|
willTrigger()
|
scaleMode
|
|
showDefaultContextMenu
|
|
stageFocusRect
|
|
stageHeight
|
|
stageWidth
|
|
tabChildren
|
|
textSnapshot
|
|
width
|
|
För att en SWF-fil i en annan sandlåda än gällande objektsägares sandlåda ska få tillgång till dessa egenskaper och metoder, måste scenägarens SWF-fil anropa metoden
Security.allowDomain()
och ge behörighet till domänen för den externa sandlådan. Mer information finns i
Författarinställningar (för utvecklare)
.
Egenskapen
frameRate
är ett undantag – samtliga SWF-filer kan läsa egenskapen
frameRate
. Däremot kan endast de filer som finns i objektsägarens säkerhetssandlåda (eller de som har behörighet via anrop av metoden
Security.allowDomain()
) ändra egenskapen.
Det finns även begränsningar för metoderna
removeChildAt()
och
swapChildrenAt()
i Stage-objektet, men de skiljer sig från andra begränsningar. För att anropa dessa metoder måste koden finnas i samma domän som ägaren av berörda underordnade objekt, alternativt kan underordnade objekt anropa metoden
Security.allowDomain()
, i stället för att de måste ligga i samma domän som objektsägaren.
Gå igenom visningslistan
Möjligheten att en SWF-fil har åtkomst till visningsobjekt som är inlästa från andra sandlådor är begränsad. För att en SWF-fil ska få åtkomst till ett visningsobjekt som skapats av en annan SWF-fil i en annan sandlåda, måste SWF-filen anropa metoden
Security.allowDomain()
för att ge behörighet från domänen. Mer information finns i
Författarinställningar (för utvecklare)
.
För att få åtkomst till Bitmap-objektet som lästes in med Loader-objektet måste det finnas en URL-principfil på bildfilens ursprungliga server. Denna korsdomänprincip måste ge behörighet till domänen med SWF-filen som försöker få åtkomst till Bitmap-objektet (se
Webbplatsinställningar (principfiler)
).
Objektet LoaderInfo som har en motsvarande inläst fil (och ett Loader-objekt) innehåller följande tre egenskaper som definierar relationen mellan det inlästa objektet och Loader-objektet:
childAllowsParent
,
parentAllowsChild
och
sameDomain
.
Säkerhet med händelser
Händelser som berör visningslistan har begränsningar för åtkomst, baserat på sandlådan varifrån visningsobjektet skickar händelsen. En händelse i visningslistan har bubblings- och hämtningsfaser (beskrivs i
Hantera händelser
). Under bubblings- och hämtningsfaserna flyttas en händelse från källvisningsobjektet via överordnade visningsobjekt i visningslistan. Om ett överordnat objekt ligger i en annan säkerhetssandlåda än källvisningsobjektet stannar bubblings- och hämtningsfasen nedanför det överordnade objektet, såvida det inte finns inbördes tillförlitlighet hos både ägaren av överordnat objekt och ägaren av källobjekt. En sådan inbördes tillförlitlighet skapas genom följande:
-
SWF-filen som äger det överordnade objektet måste anropa metoden
Security.allowDomain()
för att göra domänen med SWF-filen som äger källobjektet tillförlitlig.
-
SWF-filen som äger källobjektet måste anropa metoden
Security.allowDomain()
för att göra domänen med SWF-filen som äger det överordnade objektet tillförlitligt.
Objektet LoaderInfo som har en motsvarande inläst fil (och ett Loader-objekt) innehåller följande två egenskaper som definierar relationen mellan det inlästa objektet och Loader-objektet:
childAllowsParent
och
parentAllowsChild
.
För händelser som skickas från andra objekt än visningsobjekt finns det inga säkerhetskontroller eller säkerhetsrelaterade konsekvenser.