System.Xml.XmlSecureResolver-klass

Anmärkning

Den här artikeln innehåller ytterligare kommentarer till referensdokumentationen för det här API:et.

Klassen XmlUrlResolver är standardlösaren för alla klasser i System.Xml namnrymden. Den används för att läsa in XML-dokument och för att lösa externa resurser, till exempel entiteter, DTD:er eller scheman, samt importera eller inkludera direktiv.

Du kan åsidosätta den här standardinställningen genom att ange det objekt som XmlResolver ska användas. Om du till exempel vill begränsa de resurser som den underliggande XmlResolver kan komma åt kan du använda ett XmlSecureResolver objekt.

XmlSecureResolver omsluter en konkret implementering av XmlResolver och begränsar de resurser som den underliggande XmlResolver har åtkomst till. Har till exempel XmlSecureResolver möjlighet att förbjuda omdirigering mellan domäner, vilket inträffar från en inbäddad URI-referens (Uniform Resource Identifier).

När du skapar ett XmlSecureResolver objekt anger du en giltig XmlResolver implementering tillsammans med en URL, en instans av ett bevisobjekt eller en behörighetsuppsättning som används av XmlSecureResolver för att fastställa säkerheten. Antingen genereras en System.Security.PermissionSet eller så används den befintliga och PermissionSet.PermitOnly anropas för att skydda den underliggande XmlResolver.

Viktigt!

XmlSecureResolver objekt kan innehålla känslig information, till exempel autentiseringsuppgifter för användare. Var försiktig när du cachelagrar XmlSecureResolver-objekt och skicka inte XmlSecureResolver-objektet till en obetrodd komponent.

Viktigt!

Det finns skillnader i säkerhetsinfrastrukturen för kod som körs på .NET Common Language Runtime (CLR) och för kod som körs på CLR som är integrerad i Microsoft SQL Server 2005. Detta kan leda till fall där kod som utvecklats för .NET CLR fungerar annorlunda när den används på SQL Server-integrerad CLR. En av dessa skillnader påverkar XmlSecureResolver klassen när du har bevis som baseras på en URL (dvs. när du använder CreateEvidenceForUrl(String) metoden eller XmlSecureResolver konstruktorn). Den integrerade policyresolutionsmekanismen för CLR i SQL Server använder inte Url eller Zone informationen. I stället beviljas behörigheter baserat på det GUID som servern lägger till när sammansättningar läses in. När du använder XmlSecureResolver i den integrerade CLR:en för SQL Server anger du alla nödvändiga bevis direkt med hjälp av en angiven PermissionSet.

Så här använder du en säker lösning

  1. Skapa en XmlSecureResolver med rätt behörighetsuppsättning.

  2. Skapa ett XmlReaderSettings objekt som använder objektet XmlSecureResolver .

    XmlReaderSettings settings = new XmlReaderSettings();
    settings.XmlResolver = myResolver;
    
    Dim settings As New XmlReaderSettings()
    settings.XmlResolver = myResolver
    
  3. Skicka objektet XmlReaderSettings till Create -metoden när du skapar XmlReader objektet.

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

Begränsa åtkomsten med hjälp av en URL

XmlSecureResolver(XmlResolver, String) Använd konstruktorn för att skapa ett XmlSecureResolver objekt som endast får komma åt din lokala intranätplats.

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

Begränsa åtkomst med hjälp av en behörighetsuppsättning

  1. Skapa ett WebPermission objekt.

    WebPermission myWebPermission = new WebPermission(PermissionState.None);
    
    Dim myWebPermission As New WebPermission(PermissionState.None)
    
  2. Ange de URL:er som du vill tillåta åtkomst till.

    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. Lägg till webbbehörigheterna i PermissionSet objektet.

    PermissionSet myPermissions = new PermissionSet(PermissionState.None);
    myPermissions.AddPermission(myWebPermission);
    
    Dim myPermissions As New PermissionSet(PermissionState.None)
    myPermissions.AddPermission(myWebPermission)
    
  4. XmlSecureResolver(XmlResolver, PermissionSet) Använd konstruktorn för att skapa ett XmlSecureResolver objekt med hjälp av behörighetsuppsättningen.

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

    XmlSecureResolver Se referenssidan för ett annat exempel.

Begränsa åtkomsten med hjälp av bevis

Du kan begränsa åtkomsten genom att använda XmlSecureResolver(XmlResolver, Evidence)-konstruktorn och specificera Evidence. Evidence Används för att skapa PermissionSet som tillämpas på den underliggande XmlResolver. Anropar XmlSecureResolverPermitOnly på den skapade PermissionSet innan några resurser öppnas.

Här följer några vanliga scenarier och vilken typ av bevis som ska tillhandahållas för var och en:

  • Om du arbetar i en helt betrodd miljö använder du din assembly för att skapa evidens:

    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)
    
  • Om du arbetar i en halvbetrott miljö har du kod eller data som kommer från en extern källa, och du vet ursprunget för den externa källan och har en verifierbar URI använder du URI:n för att skapa bevis:

    
    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)
    
  • Om du arbetar i en miljö med begränsat förtroende och har kod eller data som har kommit från en extern källa, men inte vet ursprunget till den externa källan:

    Ange parametern evidence till null. Detta ger ingen åtkomst till resurser.

    -eller-

    Om programmet kräver viss åtkomst till resurser begär du bevis från anroparen.

Så här använder du den säkra resolvern för att ladda en XSLT-formatmall

  1. Skapa en XmlSecureResolver med rätt behörighetsuppsättning.

  2. Skicka XmlSecureResolver till Load-metoden.

    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)