loadPolicyFile (méthode security.loadPolicyFile)
public static loadPolicyFile(url:String) : Void
Charge un fichier de régulation interdomaine à partir d'un emplacement spécifié par le paramètre url. Les fichiers de régulation font office de mécanisme d'autorisation. Ils permettent de charger des données vers des animations Flash depuis un serveur autre que celui sur lequel elles se trouvent.
Auparavant, Flash Player 7.0.14.0 recherchait les fichiers de régulation à un emplacement défini : /crossdomain.xml sur le serveur auquel la demande de chargement de données était envoyée. Dans le cas d'une connexion XMLSocket, Flash Player 7.0.14.0 recherchait l'emplacement /crossdomain.xml sur le port 80 d'un serveur HTTP, dans le sous-domaine auquel la connexion XMLSocket était envoyée. Flash Player 7.0.14.0 (ainsi que les lecteurs antérieurs) limitait les connexions XMLSocket aux ports 1024 et supérieurs.
Grâce à l'ajout de System.security.loadPolicyFile(), Flash Player 7.0.19.0 peut charger les fichiers de régulation à partir d'emplacements aléatoires, comme il est indiqué dans l'exemple suivant :
System.security.loadPolicyFile("http://foo.com/sub/dir/pf.xml");
De cette manière, Flash Player peut récupérer un fichier de régulation à l'URL spécifiée. Les permissions accordées par l'intermédiaire de ce fichier s'appliquent à l'ensemble du contenu, au même niveau ou à un niveau inférieur dans la hiérarchie virtuelle des répertoires du serveur. Le code suivant reprend l'exemple précédent :
loadVariables("http://foo.com/sub/dir/vars.txt") // allowed
loadVariables("http://foo.com/sub/dir/deep/vars2.txt") // allowed
loadVariables("http://foo.com/elsewhere/vars3.txt") // not allowed
Vous pouvez utiliser loadPolicyFile() pour charger un nombre illimité de fichiers de régulation. Dans le cas d'une requête impliquant un fichier de régulation, Flash Player attend que le téléchargement des fichiers de régulation soit terminé avant de rejeter une requête. En dernier recours, si aucun des fichiers de régulation spécifiés par loadPolicyFile() n'autorise la requête, Flash Player effectue une recherche à l'emplacement par défaut, /crossdomain.xml.
L'utilisation du protocole xmlsocket avec un numéro de port spécifique permet de récupérer directement les fichiers de régulation depuis un serveur XMLSocket, comme indiqué dans l'exemple suivant :
System.security.loadPolicyFile("xmlsocket://foo.com:414");
De cette manière, Flash Player peut récupérer un fichier de régulation au niveau du port et de l'hôte spécifiés. Il est possible d'utiliser n'importe quel port (et non plus uniquement le port 1024 ou un port de numéro supérieur). Lors de la connexion au port spécifié, Flash Player transmet <policy-file-request />, suivi d'un octet de terminaison nul null. Il est possible de configurer un serveur XMLSocket afin qu'il distribue des fichiers de régulation et des connexions XMLSocket normales en utilisant un port unique. Dans ce cas, le serveur attend de recevoir <policy-file-request /> avant de transmettre un fichier de régulation. Il est également possible de configurer un serveur afin qu'il distribue les fichiers de régulation et les connexions standard via des ports différents. Dans ce cas, le serveur peut transmettre un fichier dès qu'une connexion est établie au niveau du port dédié aux fichiers de régulation. Le serveur doit renvoyer un octet nul à la fin du fichier de régulation avant de fermer la connexion. Si le serveur ne ferme pas la connexion, Flash Player y met fin après avoir reçu l'octet nul de terminaison null.
La syntaxe des fichiers de régulation transmis par un serveur XMLSocket est identique à celle des autres fichiers de régulation, à l'exception près que ces fichiers doivent également spécifier les ports auxquels ils permettent d'accéder. Un fichier de régulation transmis 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. L'exemple suivant illustre un fichier de régulation XMLSocket :
<cross-domain-policy>
<allow-access-from domain="*" to-ports="507" />
<allow-access-from domain="*.foo.com" to-ports="507,516" />
<allow-access-from domain="*.bar.com" to-ports="516-523" />
<allow-access-from domain="www.foo.com" to-ports="507,516-523" />
<allow-access-from domain="www.bar.com" to-ports="*" />
</cross-domain-policy>
Les fichiers de régulation récupérés à partir de l'ancien emplacement par défaut (emplacement --/crossdomain.xml d'un serveur HTTP sur le port 80) permettent implicitement d'accéder aux ports 1024 et supérieurs. Il est impossible de récupérer un fichier de régulation autorisant des opérations XMLSocket depuis un autre emplacement sur un serveur HTTP. Les emplacements personnalisés des fichiers de régulation XMLSocket doivent être situés sur le serveur XMLSocket.
Etant donné que la possibilité de se connecter aux ports dont le numéro est inférieur à 1024 est une nouveauté, les fichiers de régulation chargés par l'intermédiaire de loadPolicyFile() doivent toujours autoriser cette connexion, même lors de la connexion d'un clip à son propre sous-domaine.
Pour plus d'informations, consultez les sections suivantes :
Chapitre 17, " Understanding Security " (Comprendre la sécurité), dans Learning ActionScript 2.0 dans Flash
La présentation technique de sécurité de Flash Player 8 disponible à l'adresse :
http://www.macromedia.com/go/fp8_security
La présentation technique des API relatives à la sécurité de Flash Player 8 disponible à l'adresse :
http://www.macromedia.com/go/fp8_security_apis
Disponibilité : ActionScript 1.0; Flash Player 7.0.19.0
Paramètres
url:String - Chaîne ; URL où réside le fichier de régulation interdomaine à charger.
Partager