Classe System.Xml.XmlSecureResolver

Cet article vous offre des remarques complémentaires à la documentation de référence pour cette API.

La classe XmlUrlResolver constitue le programme de résolution par défaut de toutes les classes dans l'espace de noms System.Xml. Elle permet de charger des documents XML, de résoudre des ressources externes (entités, DTD ou schémas) et d'importer ou d'inclure des directives.

Vous pouvez ignorer cette valeur par défaut en spécifiant l'objet XmlResolver à utiliser. Par exemple, si vous souhaitez restreindre les ressources auxquelles le XmlResolver sous-jacent peut accéder, vous pouvez utiliser un objet XmlSecureResolver.

XmlSecureResolver entoure une implémentation concrète de XmlResolver et limite les ressources auxquelles le XmlResolver sous-jacent a accès. Par exemple, XmlSecureResolver a la possibilité d’interdire la redirection inter-domaines, qui se produit à partir d’une référence URI (Uniform Resource Identifier) incorporée.

Lorsque vous construisez un objet XmlSecureResolver, vous fournissez une implémentation de XmlResolver valide, ainsi qu’une URL, une instance d’un objet de preuve ou un jeu d’autorisations, utilisé par le XmlSecureResolver pour déterminer la sécurité. Un System.Security.PermissionSet est généré ou l’existant est utilisé et PermissionSet.PermitOnly est appelé pour sécuriser le XmlResolversous-jacent.

Important

Les objets XmlSecureResolver peuvent contenir des informations confidentielles telles que des informations d'identification de l'utilisateur. Soyez prudent lors de la mise en cache des objets XmlSecureResolver et éviter de passer l’objet XmlSecureResolver à un composant non approuvé.

Important

Il existe des différences dans l’infrastructure de sécurité pour le code s’exécutant sur le common language runtime (CLR) .NET et pour le code s’exécutant sur le CLR intégré à Microsoft SQL Server 2005. Cela peut entraîner des cas où le code développé pour le CLR .NET fonctionne différemment lorsqu’il est utilisé sur le CLR intégré à SQL Server. L’une de ces différences affecte la classe XmlSecureResolver lorsque vous avez des preuves basées sur une URL (autrement dit, lorsque vous utilisez la méthode CreateEvidenceForUrl(String) ou le constructeur XmlSecureResolver). Le mécanisme de résolution de stratégie du CLR intégré à SQL Server n’utilise pas les informations de Url ou Zone. Au lieu de cela, il accorde des autorisations en fonction du GUID que le serveur ajoute lors du chargement des assemblies. Lorsque vous utilisez le XmlSecureResolver dans le CLR intégré SQL Server, fournissez les preuves requises directement à l’aide d’une PermissionSetspécifiée.

Pour utiliser un programme de résolution sécurisé

  1. Créez un objet XmlSecureResolver avec un jeu d'autorisations correct.

  2. Créez un objet XmlReaderSettings qui utilise l'objet XmlSecureResolver.

    XmlReaderSettings settings = new XmlReaderSettings();
    settings.XmlResolver = myResolver;
    
    Dim settings As New XmlReaderSettings()
    settings.XmlResolver = myResolver
    
  3. Transmettez l’objet XmlReaderSettings à la méthode Create lorsque vous créez l’objet XmlReader.

    XmlReader reader = XmlReader.Create("books.xml", settings);
    
    Dim reader As XmlReader = XmlReader.Create("books.xml", settings)
    

Pour limiter l'accès à l'aide d'une URL

Utilisez le constructeur XmlSecureResolver(XmlResolver, String) pour créer un objet XmlSecureResolver autorisé à accéder à votre site intranet local uniquement.

XmlSecureResolver myResolver = new XmlSecureResolver(new XmlUrlResolver(), "http://myLocalSite/");
Dim myResolver As New XmlSecureResolver(New XmlUrlResolver(), "http://myLocalSite/")

Pour limiter l'accès à l'aide d'un jeu d'autorisations

  1. Créez un objet WebPermission.

    WebPermission myWebPermission = new WebPermission(PermissionState.None);
    
    Dim myWebPermission As New WebPermission(PermissionState.None)
    
  2. Spécifiez les URL auxquelles vous souhaitez autoriser l’accès.

    myWebPermission.AddPermission(NetworkAccess.Connect, "http://www.contoso.com/");
    myWebPermission.AddPermission(NetworkAccess.Connect, "http://litwareinc.com/data/");
    
    myWebPermission.AddPermission(NetworkAccess.Connect, "http://www.contoso.com/")
    myWebPermission.AddPermission(NetworkAccess.Connect, "http://litwareinc.com/data/")
    
  3. Ajoutez les autorisations Web à l'objet PermissionSet.

    PermissionSet myPermissions = new PermissionSet(PermissionState.None);
    myPermissions.AddPermission(myWebPermission);
    
    Dim myPermissions As New PermissionSet(PermissionState.None)
    myPermissions.AddPermission(myWebPermission)
    
  4. Utilisez le constructeur XmlSecureResolver(XmlResolver, PermissionSet) pour créer un objet XmlSecureResolver à l’aide du jeu d’autorisations.

    XmlSecureResolver myResolver = new XmlSecureResolver(new XmlUrlResolver(), myPermissions);
    
    Dim myResolver As New XmlSecureResolver(New XmlUrlResolver(), myPermissions)
    

    Consultez la page de référence XmlSecureResolver pour obtenir un autre exemple.

Pour limiter l'accès à l'aide de preuves

Vous pouvez restreindre l’accès à l’aide du constructeur XmlSecureResolver(XmlResolver, Evidence) et en spécifiant Evidence. L'objet Evidence permet de créer l'objet PermissionSet appliqué à l'objet XmlResolver sous-jacent. L'objet XmlSecureResolver appelle la méthode PermitOnly de l'objet PermissionSet créé avant l'ouverture de ressources.

Voici quelques scénarios courants et le type de preuve à fournir pour chacun :

  • Si vous travaillez dans un environnement entièrement approuvé, utilisez votre assembly pour créer la preuve :

    Evidence myEvidence = this.GetType().Assembly.Evidence;
    XmlSecureResolver myResolver;
    myResolver = new XmlSecureResolver(new XmlUrlResolver(), myEvidence);
    
    Dim myEvidence As Evidence = Me.GetType().Assembly.Evidence
    Dim myResolver As XmlSecureResolver
    myResolver = New XmlSecureResolver(New XmlUrlResolver(), myEvidence)
    
  • Si vous travaillez dans un environnement partiellement approuvé, où vous avez du code ou des données provenant d'une source externe, et que vous connaissez l'origine de cette source externe avec une URI vérifiable, utilisez cette URI pour créer la preuve :

    
    Evidence myEvidence = XmlSecureResolver.CreateEvidenceForUrl(sourceURI);
    XmlSecureResolver myResolver = new XmlSecureResolver(new XmlUrlResolver(), myEvidence);
    
    Dim myEvidence As Evidence = XmlSecureResolver.CreateEvidenceForUrl(sourceURI)
    Dim myResolver As New XmlSecureResolver(New XmlUrlResolver(), myEvidence)
    
  • Si vous travaillez dans un environnement partiellement approuvé et que vous avez du code ou des données provenant d'une source externe, mais que vous ne connaissez pas l'origine de cette source externe, vous pouvez suivre l'une des deux options suivantes :

    Définissez le paramètre evidence sur null. Ainsi, aucun accès aux ressources n'est autorisé.

    -ou-

    Si votre application nécessite un accès aux ressources, demandez une preuve à l'appelant.

Pour utiliser le programme de résolution sécurisé afin de charger une feuille de style XSLT

  1. Créez un objet XmlSecureResolver avec un jeu d'autorisations correct.

  2. Transmettez l'objet XmlSecureResolver à la méthode Load.

    XslCompiledTransform xslt = new XslCompiledTransform();
    xslt.Load("http://serverName/data/xsl/sort.xsl", null, myResolver);
    
    Dim xslt As New XslCompiledTransform()
    xslt.Load("http://serverName/data/xsl/sort.xsl", Nothing, myResolver)