Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieser Artikel enthält ergänzende Hinweise zur Referenzdokumentation für diese API.
Die XmlUrlResolver Klasse ist der Standardlöser für alle Klassen im System.Xml Namespace. Es wird verwendet, um XML-Dokumente zu laden und externe Ressourcen wie Entitäten, DTDs oder Schemas aufzulösen und Direktiven zu importieren oder einzuschließen.
Sie können diese Standardeinstellung überschreiben, indem Sie das XmlResolver zu verwendende Objekt angeben. Wenn Sie beispielsweise die Ressourcen einschränken möchten, auf die der zugrunde liegende Zugriff XmlResolver hat, können Sie ein XmlSecureResolver Objekt verwenden.
XmlSecureResolver umschließt eine konkrete Implementierung von XmlResolver und beschränkt die Ressourcen, auf die das zugrunde liegende XmlResolver Zugriff hat. XmlSecureResolver Beispielsweise kann die domänenübergreifende Umleitung verhindert werden, 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, einem Nachweisobjekt oder einem Berechtigungssatz bereit, der vom XmlSecureResolver zur Bestimmung der Sicherheit 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.
Von Bedeutung
XmlSecureResolver Objekte können vertrauliche Informationen wie Benutzeranmeldeinformationen enthalten. Seien Sie vorsichtig beim Zwischenspeichern von XmlSecureResolver-Objekten und sollten Sie das XmlSecureResolver-Objekt nicht an eine nicht vertrauenswürdige Komponente übergeben.
Von Bedeutung
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 ausgeführt wird, die in Microsoft SQL Server 2005 integriert ist. 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 (d. a. 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.
So verwenden Sie einen sicheren Resolver
Erstellen Sie eine XmlSecureResolver mit dem richtigen Berechtigungssatz.
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
Ü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 beschränken Sie den Zugriff mithilfe einer URL
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/")
So beschränken Sie den Zugriff mithilfe eines Berechtigungssatzes
Erstellen eines WebPermission-Objekts
WebPermission myWebPermission = new WebPermission(PermissionState.None);
Dim myWebPermission As New WebPermission(PermissionState.None)
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/")
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)
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 beschränken Sie den Zugriff mithilfe von Nachweisen
Sie können den Zugriff mithilfe des XmlSecureResolver(XmlResolver, Evidence) Konstruktors einschränken und angeben Evidence. Die Evidence wird verwendet, um das PermissionSet zu erzeugen, das auf das zugrunde liegende XmlResolver 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 für jede bereitgestellt werden sollen:
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 wissen 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 die Herkunft dieser Quelle nicht kennen:
Setzen Sie den
evidence
-Parameter aufnull
. Dies ermöglicht keinen Zugriff auf Ressourcen.-oder-
Wenn Ihre Anwendung Zugriff auf Ressourcen benötigt, fordern Sie Nachweise vom Aufrufer an.
So verwenden Sie den sicheren Resolver zum Laden eines XSLT-Stylesheets
Erstellen Sie eine XmlSecureResolver mit dem richtigen Berechtigungssatz.
Übergeben Sie 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)