Restricción de las API de red

Flash Player 9 y posterior, Adobe AIR 1.0 y posterior

Las API de red se pueden restringir de dos formas. Para evitar actividad malintencionada, se bloquea el acceso a los puertos que suelen estar reservados; estos bloques no se pueden sustituir en el código. Para controlar el acceso de un archivo SWF a la funcionalidad de red con respecto a otros puertos, puede utilizar la configuración allowNetworking .

Puertos bloqueados

Flash Player y Adobe AIR, al igual que los navegadores, tienen restricciones para el acceso HTTP a determinados puertos. No se permiten las peticiones HTTP a determinados puertos estándar que se utilizan tradicionalmente para tipos de servidores que no son HTTP.

Las API que acceden a una URL de red están sujetas a estas restricciones de bloqueo de puertos. La única excepción son las API que llaman directamente a sockets, como Socket.connect() y XMLSocket.connect() , o las llamadas a Security.loadPolicyFile() , donde se carga un archivo de política de socket. Las conexiones de socket se permiten o deniegan a través del uso de archivos de política de socket en el servidor de destino.

La lista siguiente muestra las API de ActionScript 3.0 donde se aplica el bloqueo de puertos:

FileReference.download(), FileReference.upload() , Loader.load() , Loader.loadBytes() , navigateToURL() , NetConnection.call() , NetConnection.connect() , NetStream.play() , Security.loadPolicyFile() , sendToURL() , Sound.load() , URLLoader.load() , URLStream.load()

El bloqueo de puertos también se aplica a la importación de biblioteca compartida, al uso de la etiqueta <img> en campos de texto y a la carga de archivos SWF en páginas HTML a través de las etiquetas <object> y <embed> .

El bloqueo de puertos también se aplica al uso de la etiqueta <img> en campos de texto y a la carga de archivos SWF en páginas HTML a través de las etiquetas <object> y <embed> .

Las listas siguientes muestran los puertos que están bloqueados:

HTTP: 20 (datos ftp), 21 (control ftp)

HTTP y FTP: 1 (tcpmux), 7 (echo), 9 (discard), 11 (systat), 13 (daytime), 15 (netstat), 17 (qotd), 19 (chargen), 22 (ssh), 23 (telnet), 25 (smtp), 37 (time), 42 (name), 43 (nicname), 53 (domain), 77 (priv-rjs), 79 (finger), 87 (ttylink), 95 (supdup), 101 (hostriame), 102 (iso-tsap), 103 (gppitnp), 104 (acr-nema), 109 (pop2), 110 (pop3), 111 (sunrpc), 113 (auth), 115 (sftp), 117 (uucp-path), 119 (nntp), 123 (ntp), 135 (loc-srv / epmap), 139 (netbios), 143 (imap2), 179 (bgp), 389 (ldap), 465 (smtp+ssl), 512 (print / exec), 513 (login), 514 (shell), 515 (printer), 526 (tempo), 530 (courier), 531 (chat), 532 (netnews), 540 (uucp), 556 (remotefs), 563 (nntp+ssl), 587 (smtp), 601 (syslog), 636 (ldap+ssl), 993 (ldap+ssl), 995 (pop3+ssl), 2049 (nfs), 4045 (lockd), 6000 (x11)

Uso del parámetro allowNetworking

Puede controlar el acceso de un archivo SWF a la funcionalidad de red configurando el parámetro allowNetworking en las etiquetas <object> y <embed> de la página HTML que aloja el contenido SWF.

Los valores posibles de allowNetworking son:

  • "all" (valor predeterminado): se admiten todas las API de red en el archivo SWF.

  • "internal" : el archivo SWF no puede llamar a las API de navegación o de interacción con el navegador que se muestran a continuación, pero puede llamar a las otras API de red.

  • "none" : el archivo SWF no puede llamar a ninguna de las API de navegación o de interacción con el navegador que se muestran a continuación, y no puede usar ninguna de las API de comunicación entre archivos SWF, incluidas también en la lista siguiente.

El parámetro allowNetworking se ha diseñado principalmente para los casos en los que el archivo SWF y la página HTML que lo incluye pertenecen a dominios diferentes. No se recomienda el uso del valor de "internal" ni "none" cuando el archivo SWF que se carga pertenece al mismo dominio que las páginas HTML que lo incluyen, porque no se puede garantizar que un archivo SWF se cargue siempre con la página HTML deseada. Las partes que no son de confianza podrían cargar un archivo SWF de su dominio sin ninguna página HTML que lo incluya, en cuyo caso la restricción allowNetworking no funcionará del modo esperado.

Al llamar a una API no permitida, se emite una excepción SecurityError.

Añada el parámetro allowNetworking y establezca su valor en las etiquetas <object> y <embed> de la página HTML que contiene una referencia al archivo SWF, como se muestra en el ejemplo siguiente:

<object classic="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" 
    Code base="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,124,0"  
    width="600" height="400" ID="test" align="middle"> 
<param name="allowNetworking" value="none" /> 
<param name="movie" value="test.swf" /> 
<param name="bgcolor" value="#333333" />  
<embed src="test.swf" allowNetworking="none" bgcolor="#333333"  
    width="600" height="400" 
    name="test" align="middle" type="application/x-shockwave-flash"  
    pluginspage="http://www.macromedia.com/go/getflashplayer" /> 
</object>

Una página HTML también puede utilizar un script para generar etiquetas que incorporan SWF. Necesita alterar el script para que inserte el valor allowNetworking adecuado. Las páginas HTML generadas por Adobe Flash Professional y Adobe Flash Builder utilizan la función AC_FL_RunContent() para incorporar referencias a archivos SWF. Añada la configuración del parámetro allowNetworking al script, como en el siguiente ejemplo:

AC_FL_RunContent( ... "allowNetworking", "none", ...)

Las siguientes API no se admiten cuando allowNetworking está establecido en "internal" :

navigateToURL() , fscommand() , ExternalInterface.call()

Además de las API anteriores, no se admiten las siguientes API cuando allowNetworking se establece en "none" :

sendToURL() , FileReference.download() , FileReference.upload() , Loader.load() , LocalConnection.connect() , LocalConnection.send() , NetConnection.connect() , NetStream.play() , Security.loadPolicyFile() , SharedObject.getLocal() , SharedObject.getRemote() , Socket.connect() , Sound.load() , URLLoader.load() , URLStream.load() , XMLSocket.connect()

Aunque la configuración de allowNetworking seleccionada permita a un archivo SWF usar una API de red, puede haber otras restricciones basadas en las limitaciones de un entorno limitado de seguridad (consulte Entornos limitados de seguridad ).

Cuando allowNetworking se establece en "none" , no se puede hacer referencia a medios externos en una etiqueta <img> en la propiedad htmlText de un objeto TextField (se emite una excepción SecurityError).

Si se establece allowNetworking en "none" , un símbolo de una biblioteca compartida importada añadido en la herramienta de edición Flash (no mediante ActionScript) se bloqueará en tiempo de ejecución.