Controles de permiso

Flash Player 9 y posterior, Adobe AIR 1.0 y posterior

El modelo de seguridad de tiempo de ejecución del cliente Flash Player se ha diseñado en torno a los recursos, que son objetos como, por ejemplo, archivos SWF, datos locales y URL de Internet. Las personas con un interés directo son aquellas que poseen o utilizan esos recursos. Estas personas pueden ejercer controles (configuración de seguridad) sobre sus propios recursos y cada recurso tiene cuatro personas con un interés directo. Flash Player aplica de forma estricta una jerarquía de autoridad para estos controles, como se muestra en la siguiente ilustración:

Jerarquía de autoridad
Jerarquía de controles de seguridad

Esto significa, por ejemplo, que si un administrador restringe el acceso a un recurso, ninguna otra persona con un interés directo puede anular dicha restricción.

Para las aplicaciones de AIR, estos controles de permiso solo se aplican al contenido que se ejecuta fuera del entorno limitado de la aplicación de AIR.

Controles de administrador

Un usuario administrador de un equipo, que haya iniciado sesión con derechos administrativos, puede aplicar una configuración de seguridad de Flash Player que afecte a todos los usuarios del equipo. En un entorno no empresarial, como puede ser un equipo doméstico, suele haber un usuario que tiene además acceso administrativo. Incluso en un entorno empresarial, los usuarios individuales pueden tener derechos administrativos en el equipo.

Hay dos tipos de controles de usuario administrador:

  • El archivo mms.cfg

  • El directorio Global Flash Player Trust

El archivo mms.cfg

El archivo mms.cfg es un archivo de texto que permite a los administradores conceder o restringir el acceso a numerosas capacidades. Cuando se inicia Flash Player, lee la configuración de seguridad de este archivo y la utiliza para limitar la funcionalidad. El archivo mms.cfg incluye valores de configuración que el administrador utiliza para gestionar capacidades como, por ejemplo, controles de privacidad, seguridad de archivos locales, conexiones de socket, etc.

Un archivo SWF puede acceder a información sobre las capacidades desactivadas, mediante una llamada a las propiedades Capabilities.avHardwareDisable y Capabilities.localFileReadDisable. Sin embargo, la mayor parte de la configuración del archivo mms.cfg no puede consultarse desde ActionScript.

Para aplicar las políticas de privacidad y seguridad independientes de la aplicación en un equipo, el archivo mms.cfg solo deben modificarlo los administradores del sistema. Los archivos de instalación de aplicaciones no deben utilizar el archivo mms.cfg. Aunque un archivo de instalación que se ejecutara con privilegios de administrador podría modificar el contenido del archivo mms.cfg, Adobe considera que dicho uso infringe la confianza del usuario e insta a los creadores de los archivos de instalación que no modifiquen nunca el archivo mms.cfg.

El archivo mms.cfg se almacena en la ubicación siguiente:

  • Windows: system \Macromed\Flash\mms.cfg

    (por ejemplo, C:\WINDOWS\system32\Macromed\Flash\mms.cfg)

  • Mac: app support /Macromedia/mms.cfg

    (por ejemplo, /Library/Application Support/Macromedia/mms.cfg)

Para obtener más información sobre el archivo mms.cfg, consulte la guía de administración de Flash Player www.adobe.com/go/flash_player_admin_es .

El directorio Global Flash Player Trust

Los usuarios con derechos administrativos y las aplicaciones de instalación pueden registrar archivos locales SWF específicos como de confianza para todos los usuarios. Estos archivos SWF se asignan al entorno limitado local de confianza. Pueden interactuar con cualquier otro archivo SWF y pueden cargar datos de cualquier ubicación local o remota. Los archivos se designan como de confianza en el directorio Global Flash Player Trust, en la ubicación siguiente:

  • Windows: system \Macromed\Flash\FlashPlayerTrust

    (por ejemplo, C:\WINDOWS\system32\Macromed\Flash\FlashPlayerTrust)

  • Mac: app support /Macromedia/FlashPlayerTrust

    (por ejemplo, /Library/Application Support/Macromedia/FlashPlayerTrust)

El directorio Flash Player Trust puede contener cualquier número de archivos de texto, cada uno de los cuales contiene listas de rutas de confianza, con una ruta por cada línea. Cada ruta puede ser un archivo SWF individual, un archivo HTML o un directorio. Las líneas de comentario empiezan por el símbolo # . Por ejemplo, un archivo de configuración de confianza de Flash Player que contenga el siguiente texto concede el estado "de confianza" a todos los archivos en el directorio especificado y en todos sus subdirectorios:

# Trust files in the following directories: 
C:\Documents and Settings\All Users\Documents\SampleApp

Las rutas incluidas en un archivo de configuración de confianza deben ser siempre rutas locales o rutas de red SMB. Las rutas HTTP incluidas en un archivo de configuración de confianza se omiten; solo los archivos locales pueden ser de confianza.

Para evitar conflictos, debe asignarse a cada archivo de configuración de confianza un nombre de archivo correspondiente a la aplicación de instalación y utilizar una extensión de archivo .cfg.

Un desarrollador que distribuye un archivo SWF ejecutado localmente a través de una aplicación de instalación puede hacer que la aplicación añada un archivo de configuración al directorio Global Flash Player Trust, concediendo así privilegios completos al archivo que distribuye. La aplicación de instalación debe ejecutarse como usuario con derechos administrativos. A diferencia del archivo mms.cfg, el directorio Global Flash Player Trust se incluye para que las aplicaciones de instalación puedan conceder permisos de confianza. Tanto los usuarios administradores como las aplicaciones de instalación pueden designar aplicaciones locales de confianza a través del directorio Global Flash Player Trust.

Hay también directorios Flash Player Trust para usuarios individuales (consulte Controles de usuario ).

Controles de usuario

Flash Player ofrece tres mecanismos de nivel de usuario diferentes para definir permisos: la interfaz de usuario de configuración y el Administrador de configuración, y el directorio User Flash Player Trust.

La interfaz de usuario Configuración y el Administrador de configuración

La interfaz de usuario Configuración es un mecanismo rápido e interactivo para establecer la configuración de un determinado dominio. El Administrador de configuración presenta una interfaz más detallada y permite realizar cambios globales que afectan a los permisos de muchos de los dominios o de todos ellos. Además, cuando un archivo SWF solicita un nuevo permiso que requiere tomar decisiones en tiempo de ejecución que afectan a la seguridad o privacidad, se muestran cuadros de diálogo en los que los usuarios pueden ajustar algunos parámetros de configuración de Flash Player.

La interfaz de usuario Configuración y el Administrador de configuración proporcionan opciones relacionadas con la seguridad como, por ejemplo, configuración de micrófono y cámara y de almacenamiento de objetos compartidos, configuración relacionada con el contenido heredado, etc. Ni el Administrador de configuración ni la Interfaz de usuario Configuración se encuentran disponibles en las aplicaciones de AIR.

Nota: las configuraciones establecidas en el archivo mms.cfg (consulte Controles de administrador ) no se reflejan en el Administrador de configuración.

Para obtener información detallada sobre el Administrador de configuración, consulte www.adobe.com/go/settingsmanager_es .

El directorio User Flash Player Trust

Los usuarios y las aplicaciones de instalación pueden registrar determinados archivos SWF locales como archivos de confianza. Estos archivos SWF se asignan al entorno limitado local de confianza. Pueden interactuar con cualquier otro archivo SWF y pueden cargar datos de cualquier ubicación local o remota. Un usuario designa un archivo como archivo de confianza en el directorio User Flash Player Trust, que es el mismo directorio donde se almacenan los objetos compartidos, en las siguientes ubicaciones (las ubicaciones son específicas del usuario actual):

  • Windows: app data\Macromedia\Flash Player\#Security\FlashPlayerTrust

    (por ejemplo, C:\Documents and Settings\JohnD\Application Data\Macromedia\Flash Player\#Security\FlashPlayerTrust en Windows XP o C:\Users\JohnD\AppData\Roaming\Macromedia\Flash Player\#Security\FlashPlayerTrust en Windows Vista)

    En Windows, la carpeta Datos de programa está oculta de forma predeterminada. Para mostrar carpetas y archivos ocultos, seleccione Mi PC para abrir el Explorador de Windows, seleccione Herramientas > Opciones de carpeta y, a continuación, la ficha Ver. En la ficha Ver, seleccione el botón de opción Mostrar todos los archivos y carpetas ocultos.

  • Mac: app data/Macromedia/Flash Player/#Security/FlashPlayerTrust

    (por ejemplo, /Users/JohnD/Library/Preferences/Macromedia/Flash Player/#Security/FlashPlayerTrust)

    Esta configuración solo afecta al usuario actual, no a los demás usuarios que inician sesión en el equipo. Si un usuario sin derechos administrativos instala una aplicación en su parte del sistema, el directorio User Flash Player Trust permite al archivo de instalación registrar la aplicación como "de confianza" para dicho usuario.

    Un desarrollador que distribuye un archivo SWF ejecutado localmente a través de una aplicación de instalación puede hacer que se añada un archivo de configuración al directorio User Flash Player Trust, concediendo así privilegios completos al archivo que distribuye. Incluso en esta situación, el archivo del directorio User Flash Player Trust se considera un control de usuario, porque se inicia como consecuencia de una acción del usuario (la instalación).

    También hay un directorio Global Flash Player Trust que el usuario administrador o el archivo de instalación utiliza para registrar una aplicación para todos los usuarios de un equipo (consulte Controles de administrador ).

Controles de sitio web (archivos de política)

Para que los datos de su servidor web estén disponibles para los archivos SWF de otros dominios, se puede crear un archivo de política en el servidor. Un archivo de política es un archivo XML situado en una ubicación específica de su servidor.

Los archivos de política afectan a varios activos, incluidos los siguientes:

  • Datos en mapas de bits, sonidos y vídeos

  • Carga de archivos de texto y XML

  • Importación de archivos SWF desde otros dominios de seguridad en el dominio de seguridad del archivo SWF que realiza la carga

  • Acceso a conexiones de socket y conexiones de socket XML

Los objetos ActionScript crean una instancia de dos tipos diferentes de conexiones de servidor: conexiones de servidor basadas en documentos y conexiones de socket. Los objetos de ActionScript como Loader, Sound, URLLoader y URLStream crean instancias de conexiones de servidor basadas en documentos y estos objetos cargan un archivo de una URL. Los objetos Socket y XMLSocket de ActionScript realizan conexiones de socket, que funcionan con datos de transmisión y no con documentos cargados.

Debido a que Flash Player admite dos tipos de conexiones de servidor, existen dos tipos de archivos de política: archivos de política URL y archivos de política de socket.
  • Las conexiones basadas en documentos requieren archivos de política URL . Estos archivos permiten al servidor indicar que sus datos y documentos están disponibles para los archivos SWF de dominios determinados o de todos los dominios.

  • Las conexiones de socket requieren archivos de política de socket , que permiten establecer redes directamente en el nivel inferior de socket TCP a través de las clases Socket y XMLSocket.

Flash Player requiere que los archivos de política se transmitan a través del mismo protocolo que pretende utilizar la conexión que se desea establecer. Por ejemplo, cuando se incluye un archivo de política en el servidor HTTP, los archivos SWF de otros dominios pueden cargar datos de él como un servidor HTTP. Sin embargo, si no se proporciona un archivo de política de socket en el mismo servidor, se prohibirá a los archivos SWF de otros dominios que se conecten con el servidor en el socket. Dicho de otro modo, la vía por la cual se recupera un archivo de política debe coincidir con la vía empleada en la conexión.

En el resto de esta sección se describen brevemente el uso y la sintaxis de los archivos de política, ya que se aplican a los archivos SWF publicados para Flash Player 10. (La implementación de archivos de política es ligeramente diferente en las versiones anteriores de Flash Player, ya que las versiones posteriores han reforzado la seguridad del programa.) Para obtener información más detallada sobre los archivos de política, consulte el tema sobre los cambios de los archivos de política en Flash Player 9 del Centro de desarrollo de Flash Player en la dirección www.adobe.com/go/devnet_security_es .

El código que se ejecuta en el entorno limitado de la aplicación de AIR no requiere ningún archivo de directiva para acceder a los datos de una URL o socket. El código de una aplicación de AIR que se ejecutan en un entorno limitado ajeno a la aplicación requiere un archivo de política.

Archivos maestros de política

De forma predeterminada, Flash Player (y el contenido de AIR que no está en el entorno limitado de la aplicación AIR) busca un archivo de política URL denominado crossdomain.xml en el directorio raíz del servidor y un archivo de política de socket en el puerto 843. Los archivos que se encuentran en cualquiera de estas dos ubicaciones se denominan archivos maestros de política . (En el caso de las conexiones de socket, Flash Player también busca un archivo de política de socket en el mismo puerto que utiliza la conexión principal. No obstante, los archivos de política que se encuentran en dicho puerto no se consideran archivos maestros de política.)

Además de especificar los permisos de acceso, el archivo maestro de política puede contener también una sentencia meta-policy . Una metapolítica especifica las ubicaciones que pueden contener archivos de política. La metapolítica predeterminada de los archivos de política URL es “master-only”, es decir, /crossdomain.xml es el único archivo de política permitido en el servidor. La metapolítica predeterminada de los archivos de política de socket es “all”, es decir, cualquier socket del host puede servir un archivo de política de socket.

Nota: en Flash Player 9 y versiones anteriores, la metapolítica predeterminada de los archivos de política URL era “all”, es decir, cualquier directorio podía contener un archivo de política. Si ha implementado aplicaciones que cargan archivos de política desde ubicaciones diferentes al archivo predeterminado /crossdomain.xml, y dichas aplicaciones pudieran ejecutarse en Flash Player 10, asegúrese de que usted (o el administrador del servidor) modifica el archivo maestro de política para permitir archivos de política adicionales. Para obtener más información sobre cómo especificar una metapolítica diferente, consulte el tema sobre los cambios de los archivos de política en Flash Player 9 del Centro de desarrollo de Flash Player en la dirección www.adobe.com/go/devnet_security_es .

Un archivo SWF puede comprobar un nombre de archivo de política o una ubicación de directorio diferentes llamando al método Security.loadPolicyFile() . Sin embargo, si el archivo maestro de política no especifica que la ubicación de destino puede servir archivos de política, la llamada a loadPolicyFile() no tendrá efecto, incluso si hay un archivo de política en dicha ubicación. Llame a loadPolicyFile() antes de intentar cualquier operación de red que requiera el archivo de política. Flash Player pone en cola automáticamente las peticiones de red detrás de sus correspondientes intentos de archivo de política. De este modo, es aceptable, por ejemplo, llamar a Security.loadPolicyFile() inmediatamente antes de iniciar una operación de red.

Al comprobar un archivo maestro de política, Flash Player espera durante tres segundos una respuesta del servidor. Si no recibe ninguna respuesta, Flash Player asumirá que no existe ningún archivo maestro de política. Sin embargo, no hay un valor de tiempo de espera predeterminado para las llamadas a loadPolicyFile() ; Flash Player asume que el archivo al que se llama existe, y esperará el tiempo necesario para cargarlo. Por tanto, si desea asegurarse de que se carga un archivo maestro de política, utilice loadPolicyFile() para cargarlo explícitamente.

Aunque el método se denomina Security.loadPolicyFile() , no se cargará ningún archivo de política hasta que no se realice una llamada de red que requiera un archivo de política. Las llamadas a loadPolicyFile() solo indican a Flash Player la ubicación en la que buscar archivos de política cuando estos se necesitan.

No puede recibir una notificación del momento en el que se inicia o completa una solicitud de archivo de política, y no hay razón para ello. Flash Player realiza comprobaciones de política de forma asincrónica, y espera automáticamente a iniciar las conexiones hasta que las comprobaciones de archivos de política se hayan realizado correctamente.

Las secciones siguientes incluyen información que se aplica solo a los archivos de política URL. Para obtener más información sobre los archivos de política de socket, consulte Conexión a sockets .

Ámbito de los archivos de política URL

Un archivo de política URL solo se aplica al directorio desde el cual se carga y a sus directorios secundarios. Un archivo de política en el directorio raíz se aplica a todo el servidor. Un archivo de política cargado desde un subdirectorio arbitrario solo se aplica a dicho directorio y a sus subdirectorios.

Un archivo de política solo afecta al acceso al servidor concreto en el que reside. Por ejemplo, un archivo de política ubicado en https://www.adobe.com:8080/crossdomain.xml solo se aplica a las llamadas para cargar datos realizadas a www.adobe.com en el puerto 8080 utilizando el protocolo HTTPS.

Especificación de los permisos de acceso en un archivo de política URL

Un archivo de política contiene una sola etiqueta <cross-domain-policy> , la cual no contiene ninguna o contiene varias etiquetas <allow-access-from> . Cada etiqueta <allow-access-from> contiene un atributo, domain , el cual especifica una dirección IP exacta, un dominio exacto o un dominio comodín (cualquier dominio). Los dominios comodín se indican de una de las dos formas siguientes:
  • Mediante un solo asterisco (*), que coincide con todos los dominios y todas las direcciones IP

  • Mediante un asterisco seguido de un sufijo, que coincide solo con los dominios que terminan con el sufijo especificado

Los sufijos deben empezar por un punto. Sin embargo, los dominios comodín con sufijos pueden incluir los dominios formados únicamente por el sufijo sin el punto inicial. Por ejemplo, xyz.com se considera parte de *.xyz.com. Los comodines no se pueden utilizar en las especificaciones de dominio IP.

En el ejemplo siguiente se muestra un archivo de política URL que permite el acceso a archivos SWF procedentes de *.example.com, www.friendOfExample.com y 192.0.34.166:

<?xml version="1.0"?> 
<cross-domain-policy> 
    <allow-access-from domain="*.example.com" /> 
    <allow-access-from domain="www.friendOfExample.com" /> 
    <allow-access-from domain="192.0.34.166" /> 
</cross-domain-policy>

Si especifica una dirección IP, solo se otorgará acceso a los archivos SWF cargados desde esa dirección IP mediante la sintaxis de IP (por ejemplo, http://65.57.83.12/flashmovie.swf). No se concederá acceso a los archivos SWF a través de la sintaxis de nombre de dominio. Flash Player no lleva a cabo la resolución DNS.

Se puede permitir el acceso a documentos procedentes de cualquier dominio, tal y como se muestra en el siguiente ejemplo:

<?xml version="1.0"?> 
<!-- http://www.foo.com/crossdomain.xml --> 
<cross-domain-policy> 
<allow-access-from domain="*" /> 
</cross-domain-policy>

Cada etiqueta <allow-access-from> tiene además el atributo opcional secure , que tiene el valor predeterminado true . Si su archivo de política se encuentra en un servidor HTTPS y desea permitir que los archivos SWF de un servidor que no sea HTTPS puedan cargar datos del servidor HTTPS, puede establecer el atributo en false .

Establecer el atributo secure en false puede poner en peligro la seguridad proporcionada por HTTPS. En concreto, establecer este atributo en false deja el contenido seguro expuesto a posibles ataques de fisgones y suplantadores. Adobe recomienda encarecidamente no establecer el atributo secure en false .

Si los datos que se van a cargar se encuentran en un servidor HTTPS, pero el archivo SWF que los carga se encuentra en un servidor HTTP, Adobe recomienda mover el archivo SWF de carga a un servidor HTTPS. De este modo, se podrán mantener todas las copias de sus datos seguros bajo la protección de HTTPS. Sin embargo, si se decide mantener el archivo SWF que realiza la carga en un servidor HTTP, deberá añadirse el atributo secure="false" a la etiqueta <allow-access-from> , como se muestra en el código siguiente:

<allow-access-from domain="www.example.com" secure="false" /> 
Otro elemento que se puede utilizar para permitir el acceso es la etiqueta allow-http-request-headers-from . Este elemento permite a un cliente que aloja contenido de otro dominio de permisos enviar a su dominio encabezados definidos por el usuario. Mientras que la etiqueta <allow-access-from> concede permiso a otros dominios para extraer datos de su dominio, la etiqueta allow-http-request-headers-from concede permiso a otros dominios para introducir datos en el mismo, en la forma de encabezados. En el ejemplo siguiente, se permite a cualquier dominio enviar el encabezado SOAPAction al dominio actual:
<cross-domain-policy> 
    <allow-http-request-headers-from domain="*" headers="SOAPAction"/> 
</cross-domain-policy>

Si la sentencia allow-http-request-headers-from se encuentra en el archivo maestro de política, se aplicará a todos los directorios del host. De lo contrario, solo se aplicará al directorio y los subdirectorios del archivo de política que contiene la sentencia.

Precarga de archivos de política

La carga de datos de un servidor o la conexión a un socket es una operación asincrónica. Flash Player simplemente espera a que el archivo de política acabe de descargarse para comenzar la operación principal. Sin embargo, la extracción de datos de píxeles de imágenes o la extracción de datos de ejemplo de sonidos es una operación sincrónica. Para poder extraer datos, primero se debe cargar el archivo de política. Al cargar un medio, especifique que busque un archivo de política:

  • Si utiliza el método Loader.load() , establezca la propiedad checkPolicyFile del parámetro context , que es un objeto LoaderContext.

  • Si incorpora una imagen en un campo de texto mediante la etiqueta <img> , establezca el atributo checkPolicyFile de la etiqueta <img> en "true" , como en el siguiente ejemplo:

    <img checkPolicyFile = "true" src = "example.jpg">
  • Si utiliza el método Sound.load() , establezca la propiedad checkPolicyFile del parámetro context , que es un objeto SoundLoaderContext.

  • Si utiliza la clase NetStream, establezca la propiedad checkPolicyFile del objeto NetStream.

Si se establece uno de estos parámetros, Flash Player comprueba primero si hay algún archivo de política que ya se haya descargado para dicho dominio. A continuación, busca el archivo de política en la ubicación predeterminada del servidor, comprobando las sentencias <allow-access-from> y la presencia de una metapolítica. Por último, considera las llamadas pendientes al método Security.loadPolicyFile() para comprobar si se encuentran dentro del ámbito correspondiente.

Controles de autor (desarrollador)

La principal API de ActionScript que se utiliza para conceder privilegios de seguridad es el método Security.allowDomain() , que concede privilegios a archivos SWF en los dominios especificados. En el siguiente ejemplo, un archivo SWF concede acceso a archivos SWF que se encuentran disponibles en el dominio www.example.com:

Security.allowDomain("www.example.com")

Este método concede permisos para lo siguiente:

El principal objetivo de llamar al método Security.allowDomain() es conceder permiso para que los archivos SWF de un dominio exterior puedan manipular mediante script el archivo SWF, a través de una llamada al método Security.allowDomain() . Para obtener más información, consulte Reutilización de scripts .

Cuando se especifica una dirección IP como parámetro en el método Security.allowDomain() , no se permite el acceso de todas las partes que tienen su origen en la dirección IP especificada. Solo se permite el acceso de la parte que contiene la dirección IP especificada en su URL, y no un nombre de dominio que corresponda a la dirección IP. Por ejemplo, si el nombre de dominio www.example.com corresponde a la dirección IP 192.0.34.166, una llamada a Security.allowDomain("192.0.34.166") no concede el acceso a www.example.com.

Se puede pasar el comodín "*" al método Security.allowDomain() para permitir el acceso desde todos los dominios. Como se concede permiso a los archivos SWF de todos los dominios para que manipulen mediante script el archivo SWF que realiza la llamada, se debe utilizar el comodín "*" con precaución.

ActionScript incluye una segunda API de permiso, denominada Security.allowInsecureDomain() . Este método realiza lo mismo que el método Security.allowDomain() y además, cuando se llama desde un archivo SWF que se encuentra disponible en una conexión HTTPS segura, permite el acceso al archivo SWF que realiza la llamada por parte de otros archivos SWF que se encuentran disponibles en un protocolo no seguro, como HTTP. Sin embargo, no es seguro permitir la reutilización de scripts entre archivos desde un protocolo seguro (HTTPS) y desde protocolos no seguros (como HTTP); si se permite, se deja el contenido seguro expuesto a posibles ataques de fisgones y suplantadores. Este es el modo en que pueden funcionar estos ataques: como el método Security.allowInsecureDomain() permite que los archivos SWF proporcionados a través de conexiones HTTP puedan acceder a los datos de HTTPS seguro, un atacante interpuesto entre el servidor HTTP y los usuarios podría sustituir el archivo SWF de HTTP por uno propio y acceder así a los datos HTTPS.

Importante: no se permite que el código que se ejecuta en el entorno limitado de la aplicación de AIR llame a los métodos allowDomain() o allowInsecureDomain() de la clase Security.

Otro método importante relacionado con la seguridad es el método Security.loadPolicyFile() , que hace que Flash Player compruebe si hay un archivo de política en una ubicación no estándar. Para obtener más información, consulte Controles de sitio web (archivos de política) .