Condividi tramite


Classe System.Xml.XmlSecureResolver

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

La classe XmlUrlResolver corrisponde al sistema di risoluzione predefinito per tutte le classi dello 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 esegue il wrapping di un'implementazione concreta di XmlResolver e limita le risorse a cui l'oggetto sottostante 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 XmlSecureResolver oggetto, si fornisce un'implementazione valida XmlResolver insieme a un URL, a un'istanza di un oggetto evidence o a un set di autorizzazioni, usato da per determinare la XmlSecureResolver 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

Gli oggetti XmlSecureResolver possono contenere informazioni sensibili quali le credenziali utente. Prestare attenzione quando si memorizzano nella cache XmlSecureResolver gli oggetti e non devono 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 di SQL Server integrated CLR non usa le Url informazioni o Zone . Concede invece le autorizzazioni in base al GUID aggiunto dal server quando vengono caricati gli assembly. Quando si usa XmlSecureResolver in CLR integrato di SQL Server, specificare direttamente qualsiasi evidenza necessaria usando un oggetto specificato PermissionSet.

Per usare un sistema di risoluzione sicuro

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

  2. Creare un oggetto XmlReaderSettings che utilizzi 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 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 tipo Evidence viene utilizzato per creare l'oggetto PermissionSet che verrà applicato all'oggetto XmlResolver sottostante. Prima di aprire una risorsa, l'oggetto XmlSecureResolver chiama il metodo PermitOnly sull'oggetto PermissionSet creato.

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

  • Se si lavora in un ambiente completamente attendibile, usare l'assembly per creare l'evidenza:

    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 dell'origine esterna, sia:

    Impostare il parametro evidence su null. In tal modo si impedisce l'accesso alle risorse.

    -o-

    Se l'applicazione richiede 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 utilizzando il set di autorizzazioni corretto.

  2. Passare 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)