Reutilización de scripts

Flash Player 9 y posterior, Adobe AIR 1.0 y posterior

Si hay dos archivos escritos en ActionScript 3.0 o dos archivos HTML que se ejecutan en el mismo dominio (por ejemplo, el URL de un archivo SWF es http://www.example.com/swfA.swf y el URL del otro es http://www.example.com/swfB.swf), el código definido en un archivo puede examinar y modificar las variables, objetos, propiedades, métodos, etc. en el otro archivo y viceversa. Esto se denomina reutilización de scripts .

Si dos archivos proceden de diferentes dominios como, por ejemplo, http://siteA.com/swfA.swf y http://siteB.com/swfB.swf, de forma predeterminada, Flash Player y AIR no permiten que swfA.swf determine swfB.swf, ni que swfB.swf determine swfA.swf. Un archivo SWF concede permiso a archivos SWF de otros dominios llamando a Security.allowDomain() . Si se llama a Security.allowDomain("siteA.com") , swfB.swf concede permiso a los archivos SWF de siteA.com para utilizarlo en scripts.

La reutilización de scripts no se permite entre archivos SWF AVM1 y archivos SWF AVM2. Un archivo SWF AVM1 es aquel que se crea en ActionScript 1.0 o ActionScript 2.0. (AVM1 y AVM2 se refieren a la máquina virtual ActionScript.) Sin embargo, es posible utilizar la clase LocalConnection para enviar datos entre AVM1 y AVM2.

En cualquier operación entre dominios es importante tener claro qué dos partes están involucradas. En esta sección, llamaremos parte que accede a la que lleva a cabo la reutilización de scripts (normalmente el archivo SWF que accede a otro) y parte a la que se accede a la otra (por lo general, el archivo SWF al que se accede). Si siteA.swf usa scripts en siteB.swf, siteA.swf será la parte que accede y siteB.swf será la parte a la que se accede, tal y como se indica en la siguiente ilustración:

Los permisos entre dominios establecidos con el método Security.allowDomain() son asimétricos. En el ejemplo anterior, siteA.swf puede manipular mediante script a siteB.swf, pero siteB.swf no puede hacerlo con siteA.swf, ya que siteA.swf no ha llamado al método Security.allowDomain() para dar permiso a los archivos SWF de siteB.com para manipularlo mediante script. Para configurar permisos simétricos, es necesario que ambos archivos SWF llamen al método Security.allowDomain() .

Flash Player protege los archivos SWF no solo de los scripts creados en varios dominios por otros archivos SWF, sino también de los originados por archivos HTML. El uso de scripts de HTML en SWF puede producirse mediante funciones callback establecidas a través del método ExternalInterface.addCallback() . Cuando el uso de scripts de HTML en SWF traspasa los dominios, el archivo SWF debe llamar al método Security.allowDomain() para evitar que la operación falle, tanto si es la parte que accede como si es la parte a la que se accede. Para obtener más información, consulte Controles de autor (desarrollador) .

Además, Flash Player proporciona controles de seguridad para el uso de scripts de SWF en HTML. Para obtener más información, consulte Control del acceso URL saliente .

Seguridad del objeto Stage

Algunas propiedades y métodos del objeto Stage solo están disponibles para los objetos Sprite o MovieClip de la lista de visualización.

No obstante, se dice que el objeto Stage tiene un propietario: el primer archivo SWF cargado. De forma predeterminada, las siguientes propiedades y métodos del objeto Stage solo están disponibles para los archivos SWF que se encuentran en el mismo entorno limitado de seguridad que el propietario de Stage:

Propiedades

Métodos

align

addChild()

displayState

addChildAt()

frameRate

addEventListener()

height

dispatchEvent()

mouseChildren

hasEventListener()

numChildren

setChildIndex()

quality

willTrigger()

scaleMode

showDefaultContextMenu

stageFocusRect

stageHeight

stageWidth

tabChildren

textSnapshot

width

Para que un archivo SWF de un entorno limitado ajeno al del propietario de Stage pueda acceder a estas propiedades y métodos, el archivo SWF del propietario de Stage debe llamar al método Security.allowDomain() para permitir el dominio del entorno limitado externo. Para obtener más información, consulte Controles de autor (desarrollador) .

La propiedad frameRate es especial, ya que cualquier archivo SWF puede leerla. Sin embargo, solo pueden cambiar la propiedad los archivos que se encuentran en el entorno limitado de seguridad del propietario de Stage (o los que han obtenido permiso a través de una llamada al método Security.allowDomain() ).

También hay restricciones relativas a los métodos removeChildAt() y swapChildrenAt() del objeto Stage, pero son distintas a las demás restricciones. En lugar de tener que estar en el mismo dominio que el propietario de Stage, para llamar a estos métodos, el código debe estar en el mismo dominio que el propietario de los objetos secundarios afectados, o bien los objetos secundarios pueden llamar al método Security.allowDomain() .

Recorrido de la lista de visualización

Existen restricciones con respecto a la capacidad de un archivo SWF para acceder a los objetos de visualización cargados desde otros entornos limitados. Para que un archivo SWF pueda acceder a un objeto de visualización creado por otro archivo SWF en un entorno limitado distinto, el archivo SWF al que se accede debe llamar al método Security.allowDomain() para permitir el acceso desde el dominio del archivo SWF que accede. Para obtener más información, consulte Controles de autor (desarrollador) .

Para acceder a un objeto Bitmap cargado por un objeto Loader, debe existir un archivo de política URL en el servidor de origen del archivo de imagen y debe conceder permiso al dominio del archivo SWF que intenta acceder al objeto Bitmap (consulte Controles de sitio web (archivos de política) ).

El objeto LoaderInfo correspondiente a un archivo cargado (y al objeto Loader) contiene las tres propiedades siguientes, que definen la relación entre el objeto cargado y el objeto Loader: childAllowsParent , parentAllowsChild y sameDomain .

Seguridad de eventos

Los eventos relacionados con la lista de visualización tienen limitaciones de acceso de seguridad que dependen del entorno limitado donde se encuentre el objeto de visualización que distribuye el evento. Un evento de la lista de visualización tiene fases de propagación y captura (descritas en Gestión de eventos ). Durante las fases de propagación y captura, un evento migra del objeto de visualización de origen a través de los objetos de visualización principales en la lista de visualización. Si un objeto principal se encuentra en un entorno limitado de seguridad distinto al del objeto de visualización de origen, la fase de captura y propagación se detiene debajo de dicho objeto principal, a menos que exista una confianza mutua entre el propietario del objeto principal y el propietario del objeto de origen. Esta confianza mutua se obtiene del siguiente modo:

  1. El archivo SWF propietario del objeto principal debe llamar al método Security.allowDomain() para confiar en el dominio del archivo SWF propietario del objeto de origen.

  2. El archivo SWF propietario del objeto de origen debe llamar al método Security.allowDomain() para confiar en el dominio del archivo SWF propietario del objeto principal.

El objeto LoaderInfo correspondiente a un archivo cargado (y al objeto Loader) contiene las dos propiedades siguientes, que definen la relación entre el objeto cargado y el objeto Loader: childAllowsParent y parentAllowsChild .

En los eventos distribuidos desde objetos que no sean objetos de visualización, no se realizan comprobaciones de seguridad.