Chargement des données

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

Un contenu Flash Player et AIR peut échanger des données avec les serveurs. Le chargement de données et le chargement de fichier multimédia sont deux opérations distinctes, car les informations chargées apparaissent sous forme d’objets de programme, au lieu d’être affichées sous forme de fichier multimédia. En règle générale, un contenu peut charger des données issues du même domaine que le domaine d’origine du contenu. Un contenu requiert cependant le plus souvent des fichiers de régulation pour charger les données issues d’autres domaines (voir Contrôles de site Web (fichiers de régulation)).

Remarque : étant donné qu’un contenu qui s’exécute dans le sandbox d’application AIR n’est jamais transmis à partir d’un domaine distant (sauf si le développeur importe intentionnellement un contenu distant dans le sandbox d’application), il ne peut pas participer aux types d’attaques bloqués par les fichiers de régulation. Un contenu AIR qui réside dans le sandbox d’application est autorisé à charger des données par les fichiers de régulation. Toutefois, un contenu AIR qui réside dans d’autres sandbox est soumis aux restrictions décrites dans cette section.

Utilisation de URLLoader et URLStream

Vous pouvez charger des données telles que des fichiers XML ou texte. Les méthodes load() des classes URLLoader et URLStream sont régies par les autorisations d’un fichier de régulation d’URL.

Si vous utilisez la méthode load() pour charger un contenu issu d’un autre domaine que celui du code qui appelle la méthode, le moteur d’exécution recherche le fichier de régulation d’URL sur le serveur des actifs chargés. S’il existe un fichier de régulation et qu’il autorise l’accès au domaine du contenu à l’origine du chargement, vous pouvez charger les données.

Connexion aux sockets

Par défaut, le moteur d’exécution recherche un fichier de régulation socket transmis à partir du port 843. Comme dans le cas des fichiers de régulation d’URL, ce fichier est appelé Fichier de régulation maître.

Lors de l’introduction des fichiers de régulation dans Flash Player 6, les fichiers socket n’étaient pas pris en charge. Les connexions aux serveurs socket étaient autorisées par un fichier de régulation figurant à l’emplacement par défaut sur un serveur HTTP à condition d’utiliser le port 80 du même hôte que le serveur socket. Flash Player 9 prend toujours cette fonctionnalité en charge mais ce n’est pas le cas de Flash Player 10. Dans Flash Player 10, seuls les fichiers de régulation socket peuvent autoriser les connexions socket.

A l’instar des fichiers de régulation d’URL, les fichiers de régulation socket prennent en charge une instruction de méta-régulation qui identifie les ports dédiés aux fichiers de régulation. La méta-régulation des fichiers de régulation socket est définie sur « all », plutôt que sur « master-only ». Par conséquent, à moins qu’un paramètre plus restrictif soit défini dans le fichier de régulation maître, Flash Player considère comme acquis que n’importe quel socket de l’hôte peut servir un fichier de régulation socket.

L’accès aux connexions socket et socket XML est désactivé par défaut, même si le socket auquel vous vous connectez se trouve dans le même domaine que le fichier SWF. Vous pouvez autoriser l’accès de niveau socket en servant un fichier de régulation socket à partir d’un des emplacements suivants :

  • Le port 843 (emplacement du fichier de régulation maître)

  • Le même port que la connexion socket principale

  • Un autre port que la connexion socket principale

Par défaut, Flash Player recherche un fichier de régulation socket sur le port 843 et sur le même port que la connexion socket principale. Si vous souhaitez servir un fichier de régulation socket à partir d’un autre port, le fichier SWF doit appeler Security.loadPolicyFile().

La syntaxe d’un fichier de régulation socket est identique à celle d’un fichier de régulation d’URL, à la différence qu’elle doit aussi spécifier les ports accessibles. Un fichier de régulation socket servi via un port dont le numéro est inférieur à 1024 peut autoriser l’accès à tous les ports. Un fichier de régulation transmis via le port 1024 ou supérieur ne peut définir l’accès qu’au port 1024 et aux ports supérieurs. Les ports accessibles sont spécifiés par l’attribut to-ports dans la balise <allow-access-from>. Il est possible d’utiliser des numéros de ports, des plages de ports et des caractères génériques.

Voici un exemple de fichier de régulation 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> 

Pour récupérer un fichier de régulation socket sur le port 843 ou sur le même port que la connexion socket principale, appelez la méthode Socket.connect() ou XMLSocket.connect(). Flash Player recherche d’abord un fichier de régulation maître sur le port 843. S’il en trouve un, il vérifie s’il contient une instruction de méta-régulation interdisant les fichiers de régulation socket sur le port cible. Si l’accès n’est pas interdit, Flash Player recherche l’instruction allow-access-from appropriée dans le fichier de régulation maître. En l’absence d’une telle instruction, il recherche un fichier de régulation sur le même port que la connexion socket principale.

Pour récupérer un fichier de régulation socket à un autre emplacement, appelez d’abord la méthode Security.loadPolicyFile() en utilisant la syntaxe "xmlsocket" spéciale, comme illustré ci-dessous :

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

Appelez la méthode Security.loadPolicyFile() avant d’appeler Socket.connect() ou XMLSocket.connect(). Flash Player peut alors attendre le retour de votre requête de fichier de régulation avant de décider ou non d’autoriser la connexion principale. Cependant, si le fichier de régulation maître spécifie que l’emplacement cible ne peut pas servir des fichiers de régulation, l’appel à loadPolicyFile() est sans effet, même si un fichier de régulation se trouve à l’emplacement en question.

Si vous implémentez un serveur socket et que vous devez fournir un fichier de régulation socket, vous devez choisir entre fournir le fichier de régulation sur le port qui accepte les connexions principales et utiliser un autre port. Dans les deux cas, votre serveur doit attendre la première transmission en provenance de votre client avant d’envoyer une réponse.

Lorsque Flash Player demande un fichier de régulation, il transmet toujours la chaîne suivante dès que la connexion est établie :

<policy-file-request/>

Une fois que le serveur a reçu la chaîne, il peut transmettre le fichier de régulation. La requête émise par Flash Player se termine toujours par un octet nul et la réponse du serveur doit se terminer de même.

N’envisagez pas d’utiliser la même connexion pour la requête de fichier de régulation et pour la connexion principale. Vous devez fermer la connexion une fois le fichier de régulation transmis. A défaut, Flash Player ferme la connexion du fichier de régulation, puis établit une autre connexion pour la connexion principale.

Protection des données

Pour protéger les données contre toute écoute ou modification lorsqu’elles transitent via Internet, vous disposez des protocoles TLS (Transport Layer Security) et SSL (Socket Layer Security) sur le serveur d’origine des données. Vous pouvez ensuite établir une connexion au serveur via le protocole HTTPS.

Dans les applications destinées à AIR 2 ou ultérieur, vous pouvez également protéger les communications socket TCP. La classe SecureSocket permet de lancer une connexion socket à un serveur socket qui utilise TLS version 1 or SSL version 4.

Envoi de données

Il se produit un envoi de données lorsque le code envoie des données à un serveur ou une ressource. L’envoi de données est systématiquement autorisé si le contenu est issu d’un domaine du réseau. Un fichier SWF local peut envoyer des données à des adresses réseau uniquement si elles se trouvent dans le sandbox approuvé localement, le sandbox local avec accès au réseau ou le sandbox d’application AIR. Pour plus d’informations, voir Sandbox locaux.

Vous pouvez utiliser la fonction flash.net.sendToURL() pour envoyer des données à une URL. D’autres méthodes permettent d’envoyer des requêtes aux URL. Il s’agit notamment des méthodes de chargement, telles que Loader.load() et Sound.load(), et des méthodes de chargement de données, telles que URLLoader.load() et URLStream.load().

Chargement et téléchargement de fichiers

La méthode FileReference.upload() lance le chargement d’un fichier sélectionné par l’utilisateur vers un serveur distant. Vous devez appeler la méthode FileReference.browse() ou FileReferenceList.browse() avant la méthode FileReference.upload().

Le code qui lance la méthode FileReference.browse() ou FileReferenceList.browse() ne peut être appelé qu’en réponse à un événement de souris ou de clavier. S’il est appelé dans d’autres situations, Flash Player 10 et les versions ultérieures renvoie une exception. Un événement lancé par l’utilisateur n’est toutefois pas nécessaire pour appeler ces méthodes à partir du sandbox d’application AIR.

L’appel de la méthode FileReference.download() ouvre une boîte de dialogue dans laquelle l’utilisateur peut télécharger un fichier à partir d’un serveur distant.

Remarque : si votre serveur nécessite une authentification des utilisateurs, seuls les fichiers SWF s’exécutant dans un navigateur (c’est-à-dire utilisant le plug-in du navigateur ou un contrôle ActiveX) peuvent fournir une boîte de dialogue pour demander à l’utilisateur un nom et un mot de passe d’authentification, ceci uniquement pour les téléchargements. Flash Player ne permet pas de charger des fichiers sur un serveur qui nécessite une authentification utilisateur.

Les chargements et téléchargements ne sont autorisés que si le fichier SWF appelant appartient au sandbox local avec système de fichiers.

Par défaut, un fichier SWF ne peut pas lancer un chargement ou un téléchargement avec un serveur autre que le sien. Il peut le faire si le serveur en question fournit un fichier de régulation accordant un accès au domaine du fichier SWF appelant.