Mise à disposition d'un service au-delà des limites de domaine
L'utilisation de pour la communication inter-domaines nécessite une protection contre plusieurs types de vulnérabilité de sécurité qui peuvent permettre d'exploiter les applications Web. La Contrefaçon intersite est une classe d'attaque qui devient une menace lors de l'autorisation d'appels inter-domaines. Cette attaque utilise un contrôle Silverlight malveillant qui transmet des commandes non autorisées à un service tiers, sans que l'utilisateur en soit conscient. Pour empêcher la contrefaçon des demandes intersite, Silverlight autorise uniquement les communications provenant du site d'origine par défaut pour toutes les demandes qui ne concernent ni des images ni des médias. Par exemple, un contrôle Silverlight hébergé sur http://contoso.com/mycontrol.aspx peut uniquement accéder aux services sur le même domaine par défaut, par exemple http://contoso.com/service.svc, mais pas à un service sur http://fabrikam.com/service.svc. Ceci empêche un contrôle Silverlight malveillant hébergé dans le domaine http://contoso.com d'appeler des opérations non autorisées sur un service hébergé dans le domaine http://fabrikam.com.
Pour activer un contrôle Silverlight pour accéder à un service dans un autre domaine, le service doit explicitement autoriser l'accès inter-domaines. Grâce à cette autorisation, un service déclare que les opérations qu'il expose peuvent être appelées en toute sécurité par un contrôle Silverlight, sans conséquences potentiellement sérieuses sur les données stockées par le service.
Silverlight 3 prend en charge deux mécanismes différents permettant aux services d'autoriser l'accès inter-domaines :
- Placez un fichier clientaccesspolicy.xml à la racine du domaine dans lequel le service est hébergé afin de configurer le service pour autoriser l'accès inter-domaines.
- Placez un fichier crossdomain.xml valide à la racine du domaine dans lequel le service est hébergé. Le fichier doit marquer l'ensemble du domaine public. Silverlight prend en charge un sous-ensemble du schéma crossdomain.xml.
Pour plus d'informations sur l'accès inter-schémas, consultez Restrictions d'accès de la sécurité réseau dans Silverlight (page pouvant être en anglais).
Utilisation d'un fichier clientaccesspolicy.xml pour autoriser l'accès inter-domaines
-
Créez un service qui permet l'accès par un client Silverlight. Pour plus d'informations sur comment réaliser ceci, consultez Procédure : créer un service pour des clients Silverlight.
-
Créez un fichier clientaccesspolicy.xml qui autorise l'accès au service. La configuration suivante autorise l'accès à partir de tout autre domaine à toutes les ressources du domaine actuel.
<?xml version="1.0" encoding="utf-8"?> <access-policy> <cross-domain-access> <policy> <allow-from http-request-headers="SOAPAction"> <domain uri="*"/> </allow-from> <grant-to> <resource path="/" include-subpaths="true"/> </grant-to> </policy> </cross-domain-access> </access-policy> -
Enregistrez le fichier clientaccesspolicy.xml )à la racine du domaine dans lequel le service est hébergé. Si, par exemple, le service est hébergé à l'adresse http://fabrikam.com, le fichier doit être placé à l'adresse http://fabrikam.com/clientaccesspolicy.xml.
-
Les valeurs valides pour l'attribut des en-têtes sont le caractère générique (« * ») qui autorise tous les en-têtes n'étant pas sur liste rouge et une liste d'en-têtes autorisés séparés par des virgules. Ces en-têtes autorisés peuvent utiliser un suffixe sous forme de caractère générique, par exemple « X-CUSTOM-* ».
-
Par ailleurs, si vous voulez autoriser l'accès à partir d'un unique domaine, tel que http://contoso.com, le fichier clientaccesspolicy.xml doit contenir la configuration suivante.
<?xml version="1.0" encoding="utf-8"?> <access-policy> <cross-domain-access> <policy> <allow-from http-request-headers="SOAPAction "> <domain uri="http://contoso.com"/> </allow-from> <grant-to> <resource path="/" include-subpaths="true"/> </grant-to> </policy> </cross-domain-access> </access-policy> -
Vérifiez que l'accès est activé en appelant le service à partir de l'autre domaine.
-
Remarque : Pour autoriser l'accès à un service HTTPS à partir d'une application HTTP, vous devez insérer l'élément <domain uri=”http://*” />à l'intérieur de votre élément<allow-from>.
Utilisation d'un fichier crossdomain.xml pour autoriser l'accès inter-domaines
-
Créez un service qui permet l'accès par un client Silverlight. Pour plus d'informations sur comment réaliser ceci, consultez Procédure : créer un service pour des clients Silverlight.
-
Créez un fichier crossdomain.xml contenant la configuration suivante. Le fichier doit être configuré de manière à autoriser l'accès au service à partir de tout autre domaine, sans quoi il n'est pas reconnu par Silverlight 3.
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <allow-http-request-headers-from domain="*" headers="SOAPAction,Content-Type"/> </cross-domain-policy>
-
Enregistrez le fichier crossdomain.xml à la racine du domaine dans lequel le service est hébergé. Si, par exemple, le service est hébergé à l'adresse http://fabrikam.com, le fichier doit être situé à l'adresse http://fabrikam.com/crossdomain.xml.
-
Vérifiez que le service est activé en appelant le service à partir de l'autre domaine.
Copyright © 2009 par Microsoft Corporation. Tous droits réservés.