System.Xml.XmlSecureResolver-Klasse

Dieser Artikel enthält ergänzende Hinweise zur Referenzdokumentation für diese API.

Die XmlUrlResolver-Klasse wird als Standard zum Auflösen für alle Klassen im System.Xml-Namespace verwendet. Mit dieser Klasse werden XML-Dokumente geladen, externe Ressourcen aufgelöst (z. B. Entitäten, DTDs oder Schemata) und Direktiven importiert oder eingefügt.

Sie können diesen Standard überschreiben, indem Sie das zu verwendende XmlResolver-Objekt angeben. Wenn Sie beispielsweise die Ressourcen einschränken möchten, auf die das zugrunde liegende XmlResolver Zugriff hat, können Sie ein XmlSecureResolver-Objekt verwenden.

XmlSecureResolver umschließt eine konkrete Implementierung von XmlResolver und schränkt die Ressourcen ein, auf die das zugrunde liegende XmlResolver Zugriff hat. Beispielsweise kann XmlSecureResolver die domänenübergreifende Umleitung verhindern, die aus einem eingebetteten URI-Verweis (Uniform Resource Identifier) erfolgt.

Wenn Sie ein XmlSecureResolver-Objekt erstellen, stellen Sie eine gültige XmlResolver-Implementierung zusammen mit einer URL, einer Instanz eines Beweisobjekts oder einem Berechtigungssatz bereit, der von XmlSecureResolver zur Sicherheitsbestimmung verwendet wird. Entweder wird ein System.Security.PermissionSet generiert oder das vorhandene verwendet und PermissionSet.PermitOnly aufgerufen, um das zugrunde liegende XmlResolver zu gewährleisten.

Wichtig

XmlSecureResolver-Objekte können vertrauliche Informationen (z. B. Anmeldeinformationen des Benutzers) enthalten. Achten Sie beim Zwischenspeichern von XmlSecureResolver-Objekten darauf, dass das XmlSecureResolver-Objekt nicht an eine nicht vertrauenswürdige Komponente übergeben wird.

Wichtig

Es gibt Unterschiede in der Sicherheitsinfrastruktur für Code, der auf der .NET Common Language Runtime (CLR) ausgeführt wird, und für Code, der auf der CLR, die in Microsoft SQL Server 2005 integriert ist, ausgeführt wird. Dies kann zu Fällen führen, in denen Code, der für .NET CLR entwickelt wurde, anders funktioniert, wenn er in der integrierten SQL Server-CLR verwendet wird. Einer dieser Unterschiede wirkt sich auf die XmlSecureResolver-Klasse aus, wenn Sie Nachweise haben, die auf einer URL basieren (wenn Sie die CreateEvidenceForUrl(String)-Methode oder den XmlSecureResolver-Konstruktor verwenden). Der Richtlinienauflösungsmechanismus der integrierten SQL Server-CLR verwendet die Url- oder Zone-Informationen nicht. Stattdessen gewährt sie Berechtigungen basierend auf der GUID, die der Server beim Laden von Assemblys hinzufügt. Wenn Sie XmlSecureResolver in der SQL Server integrierten CLR verwenden, stellen Sie alle erforderlichen Nachweise direkt unter Verwendung eines angegebenen PermissionSet-Werts bereit.

Verwenden eines sicheren Resolvers

  1. Erstellen Sie ein XmlSecureResolver-Objekt mit dem richtigen Berechtigungssatz.

  2. Erstellen Sie ein XmlReaderSettings-Objekt, das das XmlSecureResolver-Objekt verwendet.

    XmlReaderSettings settings = new XmlReaderSettings();
    settings.XmlResolver = myResolver;
    
    Dim settings As New XmlReaderSettings()
    settings.XmlResolver = myResolver
    
  3. Übergeben Sie das XmlReaderSettings-Objekt an die Create-Methode, wenn Sie das XmlReader-Objekt erstellen.

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

So schränken Sie den Zugriff mithilfe einer URL ein

Verwenden Sie den XmlSecureResolver(XmlResolver, String)-Konstruktor, um ein XmlSecureResolver-Objekt zu erstellen, das nur auf Ihre lokale Intranetwebsite zugreifen darf.

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

Einschränken den Zugriff mithilfe eines Berechtigungssatzes

  1. Erstellen eines WebPermission-Objekts

    WebPermission myWebPermission = new WebPermission(PermissionState.None);
    
    Dim myWebPermission As New WebPermission(PermissionState.None)
    
  2. Geben Sie die URLs an, auf die Sie den Zugriff zulassen möchten.

    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. Fügen Sie dem PermissionSet-Objekt die Webberechtigungen hinzu.

    PermissionSet myPermissions = new PermissionSet(PermissionState.None);
    myPermissions.AddPermission(myWebPermission);
    
    Dim myPermissions As New PermissionSet(PermissionState.None)
    myPermissions.AddPermission(myWebPermission)
    
  4. Verwenden Sie den XmlSecureResolver(XmlResolver, PermissionSet)-Konstruktor, um ein XmlSecureResolver-Objekt mithilfe des Berechtigungssatzes zu erstellen.

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

    Ein weiteres Beispiel finden Sie auf der XmlSecureResolver-Referenzseite.

So schränken Sie den Zugriff mithilfe von Nachweisen ein

Sie können den Zugriff mithilfe des XmlSecureResolver(XmlResolver, Evidence)-Konstruktors und unter Angabe von Evidence einschränken. Die Evidence-Klasse wird zum Erstellen der PermissionSet-Klasse verwendet, die auf die zugrunde liegende XmlResolver-Klasse angewendet wird. Die XmlSecureResolver-Klasse ruft vor dem Öffnen von Ressourcen die PermitOnly-Methode der erstellten PermissionSet-Klasse auf.

Im Folgenden finden Sie einige häufige Szenarien und die Art der Nachweise, die jeweils bereitgestellt werden sollten:

  • Wenn Sie in einer vollständig vertrauenswürdigen Umgebung arbeiten, verwenden Sie Ihre Assembly, um die Nachweise zu erstellen:

    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)
    
  • Wenn Sie in einer halb vertrauenswürdigen Umgebung arbeiten, verfügen Sie über Code oder Daten, die von einer externen Quelle stammen, und Sie kennen den Ursprung der externen Quelle und verfügen über einen überprüfbaren URI. Verwenden Sie den URI, um den Nachweis zu erstellen:

    
    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)
    
  • Wenn Sie in einer halb vertrauenswürdigen Umgebung arbeiten und Code oder Daten aus einer externen Quelle haben, aber Sie den Ursprung der externe Quelle nicht kennen:

    Setzen Sie den evidence-Parameter auf null. Dadurch kann nicht mehr auf Ressourcen zugegriffen werden.

    Oder

    Wenn die Anwendung den Zugriff auf einige Ressourcen verlangt, fordern Sie einen Beweis vom Aufrufer an.

Verwenden des sicheren Resolvers zum Laden eines XSLT-Stylesheets

  1. Erstellen Sie ein XmlSecureResolver-Objekt mit dem richtigen Berechtigungssatz.

  2. Übergeben Sie die XmlSecureResolver an die Load-Methode.

    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)