Comment appeler un Flex SWF depuis un domaine distant en utilisant Flash (AS3)
Si vous avez déjà travaillé avec Flash et Flex, vous avez peut-être rencontré la redoutable Erreur de sécurité
lors de la tentative d’appeler un fichier SWF provenant d’un domaine différent. Cette erreur, spécifiquement Erreur #2119
, peut constituer un obstacle dans votre parcours de développement d’application, empêchant une interaction homogène entre les SWFs hébergés sur différents domaines. Aujourd’hui, nous allons examiner le problème et explorer comment vous pouvez aborder efficacement cette question en utilisant ActionScript 3 (AS3).
Le Problème : Violation de la sandbox de sécurité
Imaginez que vous ayez un Flex SWF hébergé sur un domaine, disons, http://www.a.com/a.swf
, et que vous souhaitez charger un autre SWF, http://services.nuconomy.com/n.swf
, provenant d’un autre domaine. Votre code pourrait ressembler à ceci :
_loader = new Loader();
var req:URLRequest = new URLRequest("http://services.nuconomy.com/n.swf");
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderFinish);
_loader.load(req);
Cependant, lors de l’exécution, vous obtenez l’exception suivante :
SecurityError: Erreur #2119 : violation de la sandbox de sécurité : l'appelant http://localhost.service:1234/flashTest/Main.swf ne peut pas accéder à LoaderInfo.applicationDomain détenu par http://www.b.com/b.swf.
Cette erreur survient généralement parce que le lecteur Flash applique des restrictions de sécurité de sandbox qui empêchent les fichiers SWF servis à partir de différents domaines d’interagir directement les uns avec les autres.
La Solution : Accorder l’accès avec Security.allowDomain()
Pour permettre l’accès inter-domaines, vous devrez explicitement accorder la permission en utilisant la méthode Security.allowDomain()
dans ActionScript. Voici comment configurer efficacement cette solution :
Étape 1 : Modifier le SWF que vous essayez de charger
Dans le fichier SWF que vous essayez de charger (appelons-le http://services.nuconomy.com/n.swf
), vous devrez inclure le code suivant :
import flash.system.Security;
// Autoriser le domaine qui interagira avec ce SWF
Security.allowDomain("http://localhost.service:1234");
Étape 2 : Mettre en œuvre Security.allowDomain() correctement
- Domaines multiples : Si votre application doit permettre l’accès à partir de différents domaines, vous pouvez appeler
Security.allowDomain()
plusieurs fois pour chaque domaine. - Meilleures pratiques : Soyez prudent avec l’utilisation étendue de
allowDomain()
car cela peut exposer votre fichier SWF à des vulnérabilités de sécurité. N’autorisez que les domaines de confiance.
Étape 3 : Tester votre configuration
Une fois que vous avez mis à jour le code SWF, vous pouvez exécuter à nouveau votre application. Si tout est correctement configuré, vous devriez être capable de charger des classes à partir du SWF distant sans déclencher de violations de sécurité.
Ressources supplémentaires
Pour une compréhension approfondie, vous pouvez consulter la documentation étendue d’Adobe sur la sécurité dans Flash. Consultez Le PDF Adobe Flex 3 Programming ActionScript 3, en particulier le Chapitre 27, qui couvre la sécurité du lecteur Flash et le cross-scripting.
Conclusion
Rencontrer des violations de la sandbox de sécurité peut être frustrant, surtout lorsque vous essayez de mettre en œuvre des fonctionnalités qui améliorent la fonctionnalité de votre application. Heureusement, grâce à la méthode Security.allowDomain()
, vous pouvez facilement contourner ces restrictions et permettre une communication fluide entre les SWFs de différents domaines. Implémentez-le avec précaution, assurez-vous d’accorder l’accès uniquement à des domaines de confiance, et vous serez sur la bonne voie pour une intégration réussie.
N’oubliez pas que les pratiques de codage sécurisées sont essentielles pour maintenir l’intégrité de vos applications dans un environnement connecté.