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