Condividi tramite


Classe System.Xml.XmlSecureResolver

Questo articolo fornisce osservazioni supplementari alla documentazione di riferimento per questa API.

La classe XmlUrlResolver è il risolutore predefinito per tutte le classi nello spazio dei nomi System.Xml. Viene usato per caricare documenti XML e per risolvere risorse esterne, ad esempio entità, DTD o schemi e importare o includere direttive.

È possibile eseguire l'override di questa impostazione predefinita specificando l'oggetto XmlResolver da usare. Ad esempio, se si desidera limitare le risorse a cui l'oggetto sottostante XmlResolver può accedere, è possibile usare un XmlSecureResolver oggetto .

XmlSecureResolver avvolge una concreta implementazione di XmlResolver e limita le risorse a cui l'implementazione sottostante di XmlResolver ha accesso. Ad esempio, XmlSecureResolver ha la possibilità di impedire il reindirizzamento tra domini, che si verifica da un riferimento URI (Uniform Resource Identifier) incorporato.

Quando si costruisce un oggetto XmlSecureResolver, si fornisce una valida implementazione XmlResolver insieme a un URL, un'istanza di un oggetto evidence o un set di autorizzazioni, che viene utilizzato da XmlSecureResolver per determinare la sicurezza. Viene generato un System.Security.PermissionSet oggetto o viene usato quello esistente e PermissionSet.PermitOnly viene chiamato su di esso per proteggere l'oggetto sottostante XmlResolver.

Importante

XmlSecureResolver oggetti possono contenere informazioni riservate, ad esempio credenziali utente. Prestare attenzione quando si memorizzano nella cache gli oggetti XmlSecureResolver e non si deve passare l'oggetto XmlSecureResolver a un componente non attendibile.

Importante

Esistono differenze nell'infrastruttura di sicurezza per il codice in esecuzione in .NET Common Language Runtime (CLR) e per il codice in esecuzione in CLR integrato in Microsoft SQL Server 2005. Ciò può causare casi in cui il codice sviluppato per CLR .NET funziona in modo diverso quando viene usato in CLR integrato di SQL Server. Una di queste differenze influisce sulla XmlSecureResolver classe quando si dispone di prove basate su un URL, ovvero quando si usa il CreateEvidenceForUrl(String) metodo o il XmlSecureResolver costruttore . Il meccanismo di risoluzione dei criteri del CLR integrato di SQL Server non utilizza le informazioni Url o Zone. Concede invece le autorizzazioni in base al GUID aggiunto dal server quando vengono caricati gli assembly. Quando si usa XmlSecureResolver nel CLR integrato del SQL Server, fornire direttamente qualsiasi evidenza necessaria tramite un oggetto specificato PermissionSet.

Per usare un sistema di risoluzione sicuro

  1. Creare un oggetto XmlSecureResolver con il set di autorizzazioni corretto.

  2. Creare un XmlReaderSettings oggetto che utilizza l'oggetto XmlSecureResolver .

    XmlReaderSettings settings = new XmlReaderSettings();
    settings.XmlResolver = myResolver;
    
    Dim settings As New XmlReaderSettings()
    settings.XmlResolver = myResolver
    
  3. Passare l'oggetto XmlReaderSettings al Create metodo durante la creazione dell'oggetto XmlReader .

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

Per limitare l'accesso tramite un URL

Usare il XmlSecureResolver(XmlResolver, String) costruttore per creare un XmlSecureResolver oggetto autorizzato ad accedere solo al sito Intranet locale.

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

Per limitare l'accesso tramite un set di autorizzazioni

  1. Creare un oggetto WebPermission.

    WebPermission myWebPermission = new WebPermission(PermissionState.None);
    
    Dim myWebPermission As New WebPermission(PermissionState.None)
    
  2. Specificare gli URL a cui si vuole consentire l'accesso.

    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. Aggiungere le autorizzazioni Web all'oggetto PermissionSet .

    PermissionSet myPermissions = new PermissionSet(PermissionState.None);
    myPermissions.AddPermission(myWebPermission);
    
    Dim myPermissions As New PermissionSet(PermissionState.None)
    myPermissions.AddPermission(myWebPermission)
    
  4. Usare il XmlSecureResolver(XmlResolver, PermissionSet) costruttore per creare un XmlSecureResolver oggetto usando il set di autorizzazioni.

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

    Per un altro esempio, vedere la XmlSecureResolver pagina di riferimento.

Per limitare l'accesso usando l'evidenza

È possibile limitare l'accesso usando il XmlSecureResolver(XmlResolver, Evidence) costruttore e specificando Evidence. Il Evidence viene utilizzato per creare il PermissionSet, che viene applicato al XmlResolver sottostante. XmlSecureResolver chiama PermitOnly sull'oggetto creato PermissionSet prima di aprire le risorse.

Ecco alcuni scenari comuni e il tipo di evidenza da fornire per ognuno di essi:

  • Se si lavora in un ambiente completamente attendibile, utilizzare l'assembly per creare le prove:

    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)
    
  • Se si lavora in un ambiente semi-attendibile, si dispone di codice o dati provenienti da un'origine esterna e si conosce l'origine dell'origine esterna e si dispone di un URI verificabile, usare l'URI per creare l'evidenza:

    
    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)
    
  • Se si lavora in un ambiente semi-attendibile e si dispone di codice o dati provenienti da un'origine esterna, ma non si conosce l'origine della fonte esterna, sia:

    Impostare il parametro evidence su null. In questo modo non è consentito l'accesso alle risorse.

    oppure

    Se l'applicazione richiede l'accesso alle risorse, richiedere l'evidenza dal chiamante.

Per usare il sistema di risoluzione sicuro per caricare un foglio di stile XSLT

  1. Creare un oggetto XmlSecureResolver con il set di autorizzazioni corretto.

  2. Passa l'oggetto XmlSecureResolver al metodo 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)