Restriction des API de réseau

Flash Player 9 et les versions ultérieures, Adobe AIR 1.0 et les versions ultérieures

Les API de réseau peuvent faire l’objet de deux types de restriction : Pour empêcher les activités nuisibles, l’accès aux ports généralement réservés est bloqué. Vous ne pouvez pas passer outre ces blocages dans votre code. Pour contrôler l’accès au réseau par le biais d’autres ports d’un fichier SWF, vous pouvez utiliser le paramètre allowNetworking.

Ports bloqués

A l’instar des navigateurs, Flash Player et Adobe AIR imposent des restrictions sur l’accès HTTP à certains ports. Les requêtes HTTP sont interdites sur certains ports standard traditionnellement réservés aux types de serveurs autres que HTTP.

Toute API accédant à une URL réseau est soumise aux restrictions affectant ces ports. Les API qui appellent directement des sockets, telles que Socket.connect() et XMLSocket.connect(), ou les appels à Security.loadPolicyFile() dans lesquels un fichier de régulation socket est en cours de chargement font exception à cette règle. Les connexions socket sont autorisées ou refusées par le biais de fichiers de régulation socket sur le serveur cible.

Les API ActionScript 3.0 concernées par le blocage des ports sont les suivantes :

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

Le blocage des ports s’applique également à l’importation dans une bibliothèque partagée, à l’utilisation de la balise <img> dans les champs de texte et au chargement de fichiers SWF sur une page HTML à l’aide des balises <object> et <embed>.

Le blocage des ports s’applique également à l’utilisation de la balise <img> dans les champs de texte et au chargement de fichiers SWF sur une page HTML à l’aide des balises <object> et <embed>.

Les ports bloqués sont les suivants :

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

HTTP et 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)

Utilisation du paramètre allowNetworking

Vous pouvez contrôler l’accès d’un fichier SWF aux fonctionnalités réseau en définissant le paramètre allowNetworking dans les balises <object> et <embed> de la page HTML qui accueille le contenu SWF.

allowNetworking peut prendre les valeurs suivantes :

  • "all" (par défaut) : toutes les API de réseau sont autorisées dans le fichier SWF.

  • "internal" : le fichier SWF ne peut pas appeler les API de navigation et d’interaction avec le navigateur (présentées plus loin dans cette section). Il peut cependant appeler toutes les autres API de réseau.

  • "none" : le fichier SWF ne peut pas appeler les API de navigation et d’interaction avec le navigateur (présentées plus loin dans cette section) ni utiliser les API de communication entre fichiers SWF (également décrites plus loin).

Le paramètre allowNetworking s’utilise surtout lorsque le fichier SWF et la page HTML qui l’accueille appartiennent à des domaines différents. Il est déconseillé d’utiliser la valeur "internal" ou "none" si le fichier SWF en cours de chargement appartient au même domaine que les pages HTML qui l’accueillent, car vous ne pouvez pas garantir qu’un fichier SWF est toujours chargé avec la page HTML prévue. Des personnes mal intentionnées pourraient charger un fichier SWF à partir de votre domaine sans les pages HTML correspondantes, auquel cas la restriction allowNetworking n’aurait pas l’effet escompté.

L’appel d’une API interdite renvoie une exception SecurityError.

Ajoutez le paramètre allowNetworking et définissez sa valeur dans les balises <object> et <embed> de la page HTML contenant une référence au fichier SWF, comme indiqué dans l’exemple suivant :

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

Une page HTML peut également utiliser un script pour générer des balises d’imbrication de fichiers SWF. Vous devez modifier le script de façon à insérer les paramètres allowNetworking corrects. Les pages HTML générées par Adobe Flash Professional et Adobe Flash Builder utilisent la fonction AC_FL_RunContent() pour incorporer des références aux fichiers SWF. Ajoutez les paramètres allowNetworking au script, comme indiqué dans l’exemple suivant :

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

Les API suivantes ne sont pas autorisées lorsque allowNetworking est défini sur "internal" :

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

Outre les API recensées ci-dessus, les API ci-après sont également interdites lorsque allowNetworking est défini sur "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()

Même si le paramètre allowNetworking sélectionné permet au fichier SWF d’utiliser une API de réseau, d’autres restrictions peuvent survenir en fonction des limites fixées par le sandbox de sécurité (voir Sandbox de sécurité).

Si allowNetworking est défini sur "none", vous ne pouvez pas référencer un média externe dans une balise <img> de la propriété htmlText d’un objet TextField (si vous le faites, une exception SecurityError est renvoyée).

Si allowNetworking est défini sur "none", un symbole issu d’une bibliothèque partagée importée dans Flash Professional (pas ActionScript) est bloqué lors de l’exécution.