Flash Builder 4 Débutant ? Découvrez Flex 4 et Adobe® Flash® Builder 4
06
août
08

Création d'Applications Flex – Flash Player Security (crossdomain)

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:

6 Réponses à “Création d'Applications Flex – Flash Player Security (crossdomain)”


  1. 1 Tom juil 31st, 2009 at 14:58

    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…

  2. 2 ronan sept 28th, 2009 at 18:35

    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>

  3. 3 pierre laurens fév 23rd, 2010 at 17:33

    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

  4. 4 fnicollet fév 23rd, 2010 at 17:37

    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

  5. 5 aurelien juin 1st, 2010 at 10:30

    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 !

  1. 1 Blog Excilys » Open-source Flex development stack Pingback on jan 20th, 2010 at 0:08

Laisser un commentaire

Si vous souhaitez poster du code ActionScript, mettez le entre des balises comme ceci [as]code[/as]. Pour du code MXML, mettez le dans des balises [mxml]code[/mxml]. Merci




Bientôt sur flex-tutorial.fr …

  • - Tutoriaux BlazeDS
  • - Composants Flex

tutorial flex tutorial flex

flex Adobe Air AFCS Data Filter Lib ToasterLib librairies AS3 Flex livres AS3 Flex

 

août 2008
L Ma Me J V S D
« juil   sept »
 123
45678910
11121314151617
18192021222324
25262728293031

Catégories