Partager via


Considérations sur la sécurité des métadonnées

Lorsque vous utilisez des fonctionnalités de métadonnées dans Windows Communication Foundation (WCF), vous devez tenir compte des incidences sur la sécurité de la publication, de la récupération et de l’utilisation de métadonnées de service.

Quand publier des métadonnées

Les services WCF ne publient pas de métadonnées par défaut. Pour publier des métadonnées pour un service WCF, vous devez activer explicitement la publication de métadonnées en ajoutant des points de terminaison de métadonnées à votre service (consultez Publication de métadonnées). Désactiver la publication de métadonnées permet de réduire la surface d'attaque de votre service et limiter le risque de divulgation d'informations involontaire. Tous les services ne sont pas tenus de publier des métadonnées. Si vous n'avez pas besoin de publier de métadonnées, laissez cette fonctionnalité désactivée. Notez que vous pouvez encore générer des métadonnées et du code client directement à partir des assemblys de votre service à l’aide de l’Outil Service Model Metadata Utility (Svcutil.exe). Pour plus d’informations sur l’utilisation de Svcutil.exe pour exporter des métadonnées, consultez Comment : Utiliser Svcutil.exe pour exporter des métadonnées de code de service compilé.

Publication de métadonnées à l'aide d'une liaison sécurisée

Les liaisons de métadonnées par défaut fournies par WCF ne sont pas sécurisées et elles autorisent l’accès anonyme aux métadonnées. Les métadonnées de service publiées par un service WCF contiennent une description détaillée du service et peuvent, de manière intentionnelle ou non intentionnelle, contenir des informations sensibles. Par exemple, des métadonnées de service peuvent contenir des informations sur des opérations d'infrastructure qui n'étaient pas destinées à être diffusées publiquement. Pour protéger des métadonnées de service contre les accès non autorisés, vous pouvez recourir à une liaison sécurisée pour le point de terminaison des métadonnées. Les points de terminaison de métadonnées répondent à des demandes HTTP/GET qui peuvent utiliser le protocole SSL (Secure Sockets Layer) pour sécuriser les métadonnées. Pour plus d’informations, consultez Guide pratique pour sécuriser des points de terminaison de métadonnées.

La sécurisation des points de terminaison de métadonnées permet aussi de fournir aux demandeurs un moyen de récupérer en toute sécurité les métadonnées de service sans risque de falsification ou d'usurpation.

Utilisation de métadonnées approuvées uniquement

Les métadonnées de service permettent de construire automatiquement les composants d'exécution requis pour appeler le service. Vous pouvez également utiliser des métadonnées au moment de la conception pour développer une application cliente, ou au moment de l’exécution pour mettre à jour de manière dynamique la liaison qu’un client utilise pour appeler un service.

Les métadonnées de service peuvent être falsifiées ou usurpées lorsqu'elles sont récupérées de façon non sécurisée. Des métadonnées falsifiées sont susceptibles de rediriger votre client vers un service malveillant ou de contenir des paramètres de sécurité compromis ou des structures XML nuisibles. Les documents de métadonnées peuvent être volumineux et sont souvent enregistrés dans le système de fichiers. Pour vous protéger contre la falsification et l’usurpation de données, utilisez une liaison sécurisée pour demander des métadonnées de service, lorsque ce type de liaison est disponible.

Utilisation de techniques éprouvées pour traiter les métadonnées

Les métadonnées de service sont souvent récupérées d'un service situé sur un réseau à l'aide de protocoles standardisés, tels que WS-MetadataExchange (MEX). De nombreux formats de métadonnées incluent des mécanismes de référencement pour pointer vers des métadonnées supplémentaires. Le type MetadataExchangeClient traite automatiquement les références, à votre place, dans des documents WSDL (Web Services Description Language), des schémas XML et des documents MEX. La taille de l'objet MetadataSet créé à partir des métadonnées récupérées est directement proportionnelle à la valeur MaximumResolvedReferences de l'instance MetadataExchangeClient utilisée et à la valeur MaxReceivedMessageSize de la liaison utilisée par cette instance MetadataExchangeClient. Affectez à ces quotas les valeurs appropriées définies par votre scénario.

Dans WCF, les métadonnées de service sont traitées comme des données XML. Lors du traitement de documents XML, les applications doivent se protéger contre des structures XML malveillantes. Utilisez le XmlDictionaryReader avec les quotas appropriés lors du traitement de XML et définissez la propriété DtdProcessing sur Prohibit.

Le système de métadonnées dans WCF est extensible et les extensions de métadonnées peuvent être inscrites dans le fichier de configuration de l’application (consultez Extension du système de métadonnées). Les extensions de métadonnées peuvent exécuter du code arbitraire, vous devez donc protéger le fichier de configuration de l'application avec des listes de contrôle d'accès (ACL) appropriées et inscrire uniquement les implémentations d'extensions de métadonnées approuvées.

Validation des clients générés

Lorsque vous générez du code client à partir de métadonnées récupérées d'une source non approuvée, validez le code client généré pour vous assurer que le client généré est conforme aux stratégies de sécurité des applications clientes. Vous pouvez utiliser un comportement de validation pour vérifier les paramètres sur votre liaison cliente ou inspecter visuellement le code généré par les outils. Pour obtenir un exemple montrant comment implémenter un client qui valide des comportements, consultez Validation du client.

Protection des fichiers de configuration d'application

Le fichier de configuration d'application d'un service peut spécifier si des métadonnées doivent être publiées et de quelle façon. Il est judicieux de protéger le fichier de configuration d'application à l'aide des listes de contrôle d'accès (ACL) appropriées pour vous assurer qu'aucun intrus ne pourra modifier ces paramètres.

Voir aussi