Flash Player applique des règles de sécurité pour l'accès à la données depuis une application. Les applications Flex peuvent accéder toutes les sources de données qui sont sur le même domaine que le SWF. Par exemple, si le SWF est déployé sur www.exemple.com, il peut accéder à un webservice qui est déployé sur www.exemple.com.
Cependant, l'accès aux données sur différents domaines est interdit par le Flash Player, sauf si le domaine lui donne la permission explicite. Les règles de sécurité de Flash Player interdisent l'accès à la donnée si les domaines ne correspondent pas exactement, y compris les sous-domaines. Cela veut dire qu'un SWF déployé sur www.exemple.com ne peut pas accéder les données de test.exemple.com ou même exemple.com sauf si le serveur lui donne l'accès.
Pour que le serveur donne l'accès aux données, on utilise un fichier appelé cross-domain.
Un fichier cross-domain est un fichier XML qui réside sur le serveur qui héberge la data. Le format pour ce fichier est le suivant:
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <allow-access-from domain="www.exemple.com"/> </cross-domain-policy>
Le noeud racine <cross-domain-policy> peut contenir un ou plusieurs éléments <allow-access-from>. L'élément <allow-access-from> spécifie un domaine qui peut accéder aux ressources du serveur. Vous pouvez utiliser le joker "*" à la place du sous-domaine, ce qui veut dire que n'importe quel sous-domaine peut accéder aux data. Par exemple, le fichier suivant autorise l'accès à test.exemple.com, beta.exemple.com, etc …
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <allow-access-from domain="*.exemple.com"/> </cross-domain-policy>
Vous pouvez aussi utiliser le joker "*" à la place du nom de domaine pour autoriser l'accès depuis tous les domaines:
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <allow-access-from domain="*"/> </cross-domain-policy>
Si votre serveur utilise HTTPS et vous voulez permettre l'accès aux fichiers SWF déployés sur des domaines non-sécurisés, vous devez spécifier une valeur pour l'attribut secure. Le XML suivant permet l'accès aux fichiers SWF déployés sur http://www.exemple.com:
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <allow-access-from domain="www.exemple.com" secure="false"/> </cross-domain-policy>
Par défaut, Flash Player cherche un fichier nommé crossdomain.xml à la racine du serveur web depuis lequel la donnée est requêtée. Par exemple, si Flash Player tente de charger un document XML depuis http://www.exemple.com/data/xml/data.xml, il va chercher http://www.exemple.com/crossdomain.xml. Si vous voulez fixer des permissions différentes suivant les ressources à accéder, vous pouvez optionnellement déployer des fichiers cross-domain différents à des emplacements différents sur le serveur. Par exemple, un fichier cross-domain placé à http://www.exemple.com/data/xml sera appliqué uniquement aux ressources de ce répertoire.
Cependant, si vous placez de tels fichiers dans des répertoires qui ne sont pas ceux par défaut, vous devez utiliser de l'ActionScript pour charger le fichier dans l'application Flex. Le code ActionScript utilise la méthode static loadPolicyFile() de la classe flash.system.Security.
Le code suivant charge un fichier de cross-domain:
Security.loadPolicyFile("http://www.exemple.com/data/xml/policy.xml");
Autres Tutoriaux Flex liés:
- Flex LocalConnection – Communication en Cross-Domain
- Flex Validator: Personnaliser les tooltip d'erreur du EmailValidator
- Flex Validator: Personnaliser les tooltip d'erreur du NumberValidator
- Flex ActionScript – Benchmark Flash Player 10 et Flash Player 10.1
- Flex Modules – Utiliser ModuleLoader pour charger et décharger des modules









Salut,
Pourquoi parfois flash ne va pas chercher le crossdomain XML dans le root?
J'ai eu ce problème en utilisant des 'Content Deliver' ou CDN, j'ai du créer explicitement charger le crossdomain.xml avec Security.loadPolicyFile(domain + '/crossdomain.xml');
De plus, en utilisant un proxy HTTP, je n'arrive pas à voir la requête HTTP de Flash pour avoir ce fichier…
Bizarre bizarre…
merci pour ces explications !
en fait avec le modèle de crossdomain.xml que tu nous donne,
ça ne marchait pas avec mon appli swf (webService dévelloppé en .NET sur un https)
j'ai cherché dans tous les sens et avec ce modèle, cela fonctionne enfin ! :
<?xml version="1.0" ?>
<!DOCTYPE cross-domain-policy (View Source for full doctype…)>
<cross-domain-policy>
<allow-http-request-headers-from domain="*" headers="*" secure="false" />
<allow-access-from domain="*" secure="false" />
</cross-domain-policy>
Salut.
Je dis peut être une belle bétise, mais j'ai l'impression qu'avec le player 10, il faut vraiment lui fournir un crossdomain.xml sous "root" !
Je m'explique :
avant, quand je faisait un appel webservice par exemple (webservice accessible vers :
http://serveurWS/une_instance/services/WebServWS?wsdl) depuis un au domaine que "serveurWS"
si j'avais un crossdomain sous http://serveurWS/une_instance/crossdomain.xml qui autorise tout, et que je faisais
Security.loadPolicyFile("http://serveurWS/une_instance/crossdomain.xml");
il n'y avait pas de souci.
Maintenant, si on laisse ça, on se prend
1 ) un avertissement :
Avertissement :Le domaine "serveurWS" ne spécifie pas de méta-régulation. Application de la méta-régulation 'master-only' par défaut
2 ) Puis une erreur :
Erreur :Le fichier de régulation présent à
http://serveurWS/une_instance/crossdomain.xml est ignoré à cause de la méta-régulation 'master-only'.
et
*** Violation de la sécurité Sandbox***
Si je mets mon crossdomain sous http://serveurWS/crossdomain.xml, ça marche impec
A bientôt
Salut,
je pense que tu ne dis pas de bétises, certaines modifications ont été apportées sur FP10, notamment au niveau de la sécurité (quelques failles avaient été détéctées).
Fabien
bonjour,
J'ai une application flex qui utilise un webservice : http://www.caue-observatoire.fr/ws/ouvragesv2.asmx
Mon application fonctionne correctement en local (normal); sur le serveur distant qui heberge le webservice j'ai déposé à la racine un fichier crossdomain :
<allow-http-request-headers-from domain="*" headers="*" secure="false"
Mais rien à faire lorsque mon application est en ligne les données ne se chargent pas et je n'ai pas de message d'erreur !