Partager via


Classe System.Xml.XmlSecureResolver

Cet article fournit des remarques supplémentaires à la documentation de référence de cette API.

La classe XmlUrlResolver est le résolveur par défaut pour toutes les classes de l’espace de noms System.Xml. Il est utilisé pour charger des documents XML et résoudre des ressources externes telles que des entités, des DTD ou des schémas, et importer ou inclure des directives.

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

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 capacité d’interdire la redirection inter-domaines, qui provient d’une référence URI (Uniform Resource Identifier) incorporée.

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

Importante

XmlSecureResolver les objets peuvent contenir des informations sensibles telles que des informations d’identification utilisateur. Soyez prudent lors de la mise en cache des objets XmlSecureResolver et ne passez pas l’objet XmlSecureResolver à un composant non approuvé.

Importante

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 XmlSecureResolver classe lorsque vous avez des preuves basées sur une URL (autrement dit, lorsque vous utilisez la CreateEvidenceForUrl(String) méthode ou le XmlSecureResolver constructeur). Le mécanisme de résolution de stratégie du CLR intégré à SQL Server n’utilise pas les informations Url ni Zone. Au lieu de cela, il accorde des autorisations basées sur le GUID que le serveur ajoute lorsque les assemblys sont chargés. Lorsque vous utilisez XmlSecureResolver dans le CLR intégré de SQL Server, fournissez directement les preuves requises en utilisant un PermissionSet spécifié.

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 XmlReaderSettings objet 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 Create méthode lorsque vous créez l’objet XmlReader .

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

Pour restreindre l’accès à l’aide d’une URL

Utilisez le XmlSecureResolver(XmlResolver, String) constructeur pour créer un XmlSecureResolver objet 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 restreindre l’accès à l'aide d'une série 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 de l’ensemble d’autorisations.

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

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

Pour restreindre l’accès à l’aide de preuves

Vous pouvez restreindre l’accès à l’aide du XmlSecureResolver(XmlResolver, Evidence) constructeur et en spécifiant Evidence. Evidence est utilisé pour créer PermissionSet appliqué au 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 d’eux :

  • 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 semi-approuvé, vous avez du code ou des données provenant d’une source externe et que vous connaissez l’origine de la source externe et que vous disposez d’un URI vérifiable, utilisez l’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 de confiance partielle et que vous avez du code ou des données provenant d’une source externe, sans connaître l’origine de cette source externe, alors :

    Définissez le paramètre evidence sur null. Cela n’autorise aucun accès aux ressources.

    - ou -

    Si votre application nécessite un accès à des ressources, demandez des preuves auprès de l’appelant.

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

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

  2. Passez le 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)