Scambio di script

Flash Player 9 e versioni successive, Adobe AIR 1.0 e versioni successive

Se due file SWF sono stati creati con ActionScript 3.0, o due file HTML in esecuzione in AIR sono gestiti dallo stesso dominio (ad esempio, l'URL di un file SWF è http://www.example.com/swfA.swf e l'URL dell'altro è http://www.example.com/swfB.swf), il codice definito in un file può esaminare e modificare variabili, oggetti, proprietà e metodi dell'altro e viceversa. Questa operazione è detta scambio di script.

Se i due file appartengono a domini diversi, ad esempio http://siteA.com/swfA.swf e http://siteB.com/siteB.swf, per impostazione predefinita non è consentito a swfA.swf di eseguire script su swfB.swf né viceversa. Il file SWF permette ai file SWF di altri domini di scambiare script tramite la chiamata alla funzione Security.allowDomain(). La chiamata a Security.allowDomain("siteA.com") consente a swfB.swf di ricevere script dai file SWF di siteA.com.

Lo scambio di script non è supportato tra file SWF di AVM1 e AVM2. I file SWF di AVM1 sono file creati con ActionScript 1.0 o ActionScript 2.0 (la dicitura AVM1 e AVM2 è riferita ad ActionScript Virtual Machine). È tuttavia possibile utilizzare la classe LocalConnection per scambiare dati tra AVM1 e AVM2.

In qualsiasi configurazione tra domini, sono coinvolte due parti ed è importante chiarire il ruolo di ognuna. Ai fini di questa discussione, il lato che esegue lo scambio di script è detto parte che accede (di solito il file SWF che esegue l'accesso), mentre l'altro lato è detto parte a cui si accede (di solito il file SWF a cui si accede). Quando siteA.swf invia script a siteB.swf, siteA.swf è la parte che accede, mentre siteB.swf la parte a cui si accede, come illustrato dal diagramma seguente:

Le autorizzazioni tra domini definite tramite il metodo Security.allowDomain() sono asimmetriche. Nell'esempio precedente, siteA.swf può inviare script a siteB.swf, ma siteB.swf non può inviare script a siteA.swf, poiché siteA.swf non ha eseguito la chiamata al metodo Security.allowDomain() per dare ai file SWF di siteB.com l'autorizzazione a inviare script. Per impostare autorizzazioni simmetriche, è necessario che entrambi i file SWF chiamino il metodo Security.allowDomain().

Oltre a proteggere i file SWF dall'esecuzione di script tra domini generati da altri file SWF, Flash Player protegge i file SWF dall'esecuzione di script tra domini generati da file HTML. La trasmissione di script da file HTML a SWF avviene tramite callback gestiti mediante il metodo ExternalInterface.addCallback(). Quando gli script da HTML a SWF superano il dominio, il file SWF a cui si accede deve chiamare il metodo Security.allowDomain(), esattamente come quando la parte che accede è un file SWF; in caso contrario, l'operazione non viene completata. Per ulteriori informazioni, vedete Controlli autore (sviluppatore).

Flash Player prevede inoltre controlli di sicurezza per la trasmissione di script da SWF a HTML. Per ulteriori informazioni, vedete Controllo dell’accesso agli URL in uscita.

Sicurezza dello stage

Alcune proprietà e metodi dell'oggetto Stage sono disponibili a tutti gli oggetti sprite o clip filmato presenti nell'elenco di visualizzazione.

Tuttavia, l’oggetto Stage presenta un proprio titolare: vale a dire il primo file SWF caricato. Per impostazione predefinita, le proprietà e i metodi seguenti dell'oggetto Stage sono disponibili unicamente ai file SWF che si trovano nella stessa sandbox di sicurezza del titolare dello stage:

Proprietà

Metodi

align

addChild()

displayState

addChildAt()

frameRate

addEventListener()

height

dispatchEvent()

mouseChildren

hasEventListener()

numChildren

setChildIndex()

quality

willTrigger()

scaleMode

 

showDefaultContextMenu

 

stageFocusRect

 

stageHeight

 

stageWidth

 

tabChildren

 

textSnapshot

 

width

 

Perché un file SWF in una sandbox diversa da quella del titolare dello stage possa accedere a queste proprietà e metodi, il file SWF del titolare dello stage deve chiamare il metodo Security.allowDomain() per consentire l'accesso a domini di una sandbox esterna. Per ulteriori informazioni, vedete Controlli autore (sviluppatore).

La proprietà frameRate rappresenta un caso particolare, in quanto qualsiasi file SWF è in grado di leggere la proprietà frameRate. Tuttavia, solo i file che si trovano nella stessa funzione di sicurezza sandbox del titolare dello stage (o i file ai quali è stata concessa l'autorizzazione di accesso mediante il metodo Security.allowDomain()) possono modificare tale proprietà.

Esistono inoltre limitazioni relative ai metodi removeChildAt() e swapChildrenAt() dell'oggetto stage, ma si tratta di restrizioni di tipo differente. Anziché essere nello stesso dominio del titolare dello stage, per chiamare questi metodi è necessario che il codice si trovi nello stesso dominio del titolare degli oggetti secondari interessati, oppure tali oggetti secondari possono chiamare il metodo Security.allowDomain().

Lettura dell'elenco di visualizzazione

La capacità di un file SWF di accedere a oggetti di visualizzazione caricati da altre sandbox è limitata. Perché un file SWF possa accedere a oggetti di visualizzazione creati da un altro file SWF in una sandbox differente, è necessario che il file SWF al quale si accede chiami il metodo Security.allowDomain() per consentire l'accesso da parte del dominio del file SWF che accede. Per ulteriori informazioni, vedete Controlli autore (sviluppatore).

Per accedere a un oggetto Bitmap che è stato caricato da un oggetto Loader, è necessario che sia presente un file di criteri degli URL nel server di origine del file di immagine e che tale file di criteri degli URL conceda l'autorizzazione di accesso al dominio del file SWF che tenta di accedere all'oggetto Bitmap (vedete Controlli del sito Web (file di criteri)).

L'oggetto LoaderInfo corrispondente al file caricato (e all'oggetto Loader) include le tre seguenti proprietà, che definiscono la relazione tra l'oggetto caricato e l'oggetto Loader: childAllowsParent, parentAllowsChild e sameDomain.

Sicurezza degli eventi

Gli eventi collegati all'elenco di visualizzazione presentano limitazioni di accesso di sicurezza, in base alla sandbox dell'oggetto di visualizzazione che invia l'evento. Un evento nell'elenco di visualizzazione presenta fasi di bubbling e di cattura (descritte in Gestione degli eventi). Durante le fasi di bubbling e di cattura, l'evento migra dall'oggetto di visualizzazione di origine attraverso oggetti di visualizzazione principali nell'elenco di visualizzazione. Se un oggetto principale si trova in una funzione di sicurezza sandbox diversa da quella dell'oggetto di visualizzazione di origine, le fasi di cattura e bubbling si interrompono al di sotto dell'oggetto principale, a meno che non vi sia un rapporto di mutua fiducia tra il titolare dell'oggetto principale e il titolare dell'oggetto di origine. Tale rapporto di mutua fiducia può essere ottenuto come segue:

  1. Il file SWF titolare dell'oggetto principale deve chiamare il metodo Security.allowDomain() per considerare attendibile il dominio del file SWF titolare dell'oggetto di origine.

  2. Il file SWF titolare dell'oggetto di origine deve chiamare il metodo Security.allowDomain() per considerare attendibile il dominio del file SWF titolare dell'oggetto di principale.

L'oggetto LoaderInfo corrispondente al file caricato (e all'oggetto Loader) include le due seguenti proprietà, che definiscono la relazione tra l'oggetto caricato e l'oggetto Loader: childAllowsParent e parentAllowsChild.

Per gli eventi che vengono inviati da oggetti diversi da oggetti di visualizzazione, non sono previste verifiche o altre implicazioni di sicurezza.