Carga de datos

Flash Player 9 y posterior, Adobe AIR 1.0 y posterior

El contenido de Flash Player y de AIR puede intercambiar datos con servidores. La carga de datos es una operación distinta de la carga de medios, ya que la información cargada aparece directamente como objetos de programación en lugar de mostrarse como medios. Generalmente, el contenido puede cargar datos desde el mismo dominio que el que los originó. No obstante, el contenido requerir archivos de política para cargar datos desde otros dominios (consulte Controles de sitio web (archivos de política) ).

Nota: el contenido que se ejecuta en el entorno limitado de la aplicación de AIR nunca se sirve desde un dominio remoto (a no ser que el desarrollador importe intencionadamente contenido remoto en el entorno limitado de la aplicación), por lo que no puede participar en este tipo de ataques que quedan protegidos por los archivos de política. El contenido de AIR en el entorno limitado de la aplicación no está limitado a la carga de datos en sus archivos de política. Sin embargo, el contenido de AIR en otros entornos limitados está sujeto a las limitaciones aquí descritas.

Uso de URLLoader y URLStream

Se pueden cargar datos como, por ejemplo, un archivo XML o un archivo de texto. Los métodos load() de las clases URLLoader y URLStream se rigen por los permisos del archivo de política URL.

Si utiliza el método load() para cargar contenido desde un dominio distinto al dominio desde el cual llama el método, el motor de ejecución busca un archivo de política en el servidor de los activos cargados. Si hay un archivo de política y concede acceso al dominio del contenido que realiza la carga, se pueden cargar los datos.

Conexión a sockets

De forma predeterminada, el motor de ejecución busca un archivo de política de socket disponible en el puerto 843. Tal y como sucede con los archivos de política URL, este archivo se denomina archivo maestro de política .

Cuando se introdujeron por primera vez los archivos de política en Flash Player 6, no se admitían los archivos de política de socket. Las conexiones a servidores de socket se autorizaban a través de un archivo de política desde la ubicación predeterminada en un servidor HTTP del puerto 80 del mismo host que el servidor de socket. Flash Player 9 todavía admite esta capacidad, pero Flash Player 10 no. En Flash Player 10, solo los archivos de política de socket pueden autorizar las conexiones de socket.

Al igual que los archivos de política URL, los archivos de política de socket admiten una sentencia de metapolítica que especifica los puertos que pueden servir los archivos de política. Sin embargo, en lugar de “master-only”, la metapolítica predeterminada de los archivos de política de socket es “all”. Es decir, a no ser que el archivo maestro de política especifique una configuración más restrictiva, Flash Player asumirá que cualquier socket del host puede servir un archivo de política de socket.

De forma predeterminada, el acceso a conexiones de socket y socket XML está desactivado, incluso si el socket al que se conecta se encuentra en el dominio al que pertenece el archivo SWF. El acceso a nivel de socket es posible si se sirve un archivo de política de socket desde cualquiera de las ubicaciones siguientes:

  • Puerto 843 (la ubicación del archivo maestro de política)

  • El mismo puerto que la conexión de socket principal

  • un puerto diferente a la conexión de socket principal

De forma predeterminada, Flash Player busca un archivo de política de socket en el puerto 843 y en el mismo puerto que utiliza la conexión de socket principal. Para servir un archivo de política de socket desde un puerto diferente, el archivo SWF debe llamar a Security.loadPolicyFile() .

Los archivos de política de socket presentan la misma sintaxis que los archivos de política URL, salvo por el hecho de que también deben especificar los puertos a los que concede acceso. Cuando un archivo de política de socket procede de un número de puerto inferior a 1024, dicho archivo puede conceder acceso a cualquier puerto; cuando un archivo de política procede del puerto 1024 o superior, solo puede conceder acceso a otros puertos 1024 y superiores. Los puertos permitidos se especifican en el atributo to-ports de la etiqueta <allow-access-from> . Se aceptan como valor los números de puerto únicos, los intervalos de puertos y los comodines.

A continuación se muestra un ejemplo de un archivo de política de socket:

<?xml version="1.0"?> 
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> 
<!-- Policy file for xmlsocket://socks.mysite.com --> 
<cross-domain-policy>  
    <allow-access-from domain="*" to-ports="507" />  
    <allow-access-from domain="*.example.com" to-ports="507,516" />  
    <allow-access-from domain="*.example.org" to-ports="516-523" />  
    <allow-access-from domain="adobe.com" to-ports="507,516-523" />  
    <allow-access-from domain="192.0.34.166" to-ports="*" />  
</cross-domain-policy> 

Para recuperar un archivo de política de socket del puerto 843 o del mismo puerto que utiliza la conexión de socket principal, llame al método Socket.connect() o XMLSocket.connect() . Flash Player comprueba en primer lugar la presencia del archivo maestro de política en el puerto 843. Si encuentra alguno, comprobará si este contiene una sentencia de metapolítica que prohíba los archivos de política de socket en el puerto de destino. Si el acceso no está prohibido, Flash Player buscará en primer lugar la sentencia allow-access-from en el archivo maestro de política. Si no encuentra ninguno, entonces buscará un archivo de política de socket en el mismo puerto que utiliza la conexión de socket principal.

Para recuperar un archivo de política de socket de una ubicación diferente, primero llame al método Security.loadPolicyFile() con la sintaxis especial "xmlsocket" , como en el ejemplo siguiente:

Security.loadPolicyFile("xmlsocket://server.com:2525"); 

Llame al método Security.loadPolicyFile() antes de llamar al método Socket.connect() o XMLSocket.connect() . Flash Player espera entonces hasta completar la solicitud del archivo de política antes de decidir si permite o no la conexión principal. Sin embargo, si el archivo maestro de política especifica que la ubicación de destino no puede servir archivos de política, la llamada a loadPolicyFile() no será efectiva, incluso si hay un archivo de política en dicha ubicación.

Si se implementa un servidor de socket y se necesita proporcionar un archivo de política de socket, se debe decidir entre proporcionar el archivo de política a través del mismo puerto que acepta conexiones principales o utilizar otro puerto. En cualquier caso, para poder enviar una respuesta, el servidor deberá esperar a la primera transmisión de su cliente.

Cuando Flash Player solicita un archivo de política, siempre transmite la siguiente cadena en cuanto se establece una conexión:

<policy-file-request/>

Cuando el servidor recibe esta cadena, puede transmitir el archivo de política. La petición de Flash Player siempre termina con un byte null, y la respuesta del servidor debe terminar con otro byte del mismo tipo.

No cabe esperar que se pueda reutilizar la misma conexión para una solicitud de archivo de política y una conexión principal; cierre la conexión después de transmitir el archivo de política. De lo contrario, Flash Player cierra la conexión del archivo de política antes de volver a conectar para configurar la conexión principal.

Protección de datos

Para proteger los datos frente a pérdidas y modificaciones mientras viajan por Internet, puede utilizar los protocolos TLS o SSL en el servidor desde el que se originan los datos. Seguidamente, puede conectarse al servidor mediante el protocolo HTTPS.

En aplicaciones creadas para AIR 2 o posterior, también puede proteger las comunicaciones de socket TCP. La clase SecureSocket permite iniciar una conexión de socket con un servidor de sockets que use TLS (versión 1) o SSL (versión 4).

Envío de datos

El envío de datos se produce cuando el código envía los datos a un servidor o recursos. En envío de datos se permite siempre para el contenido de un dominio de red. Un archivo SWF local puede enviar datos a direcciones de la red únicamente si se encuentra en el entorno limitado local de confianza, en el entorno limitado local con acceso a la red o en un entorno limitado de la aplicación de AIR. Para obtener más información, consulte Entornos limitados locales .

Se puede utilizar la función flash.net.sendToURL() para enviar datos a un URL. Otros métodos también envían peticiones a URL. Algunos de estos métodos son los métodos de carga como Loader.load() y Sound.load() , y los métodos de carga de datos como URLLoader.load() y URLStream.load() .

Carga y descarga de archivos

El método FileReference.upload() inicia la carga de un archivo seleccionado por un usuario en un servidor remoto. Se debe llamar al método FileReference.browse() o FileReferenceList.browse() antes de llamar al método FileReference.upload() .

El código que inicia el método FileReference.browse() o FileReferenceList.browse() solo puede llamarse como respuesta a un evento de ratón o de teclado. Si se llama en otras situaciones, Flash Player 10 y versiones posteriores emitirán una excepción. No obstante, no se requiere ningún evento iniciado por el usuario para llamar a estos métodos desde el entorno limitado de la aplicación de AIR.

Al llamar al método FileReference.download() , se abre un cuadro de diálogo en el que el usuario puede descargar un archivo desde un servidor remoto.

Nota: si el servidor requiere autenticación del usuario, solo los archivos que se ejecutan en un navegador, es decir que utilizan el plug-in de navegador o controles ActiveX, pueden mostrar un cuadro de diálogo para pedir al usuario un nombre de usuario y una contraseña para la autenticación, y solo para las descargas. Flash Player no permite realizar cargas en servidores que requieran autenticación de usuario.

Las cargas y descargas no se permiten si el archivo SWF que realiza la llamada se encuentra en el entorno limitado local con sistema de archivos.

De forma predeterminada, un archivo SWF no puede realizar cargas ni descargas en un servidor ajeno. Un archivo SWF puede realizar cargas y descargas en otro servidor, si dicho servidor proporciona un archivo de política que conceda permiso al dominio del archivo SWF que realiza la llamada.