Gewusst wie: Verwenden der XmlSecureResolver-Klasse
Aktualisiert: November 2007
Mit der XmlSecureResolver-Klasse kann ein anderes XmlResolver-Objekt gesichert werden. Dies erfolgt durch Wrapping des XmlResolver-Objekts und Beschränken der Ressourcen, auf die der zugrunde liegende XmlResolver zugreifen kann. Beispielsweise kann mit der XmlSecureResolver-Klasse der Zugriff auf bestimmte Internetsites oder Internetzonen verhindert werden.
So schränken Sie den Zugriff mithilfe einer URL ein
Erstellen Sie ein XmlSecureResolver-Objekt, das nur auf die lokale Intranetsite zugreifen kann.
Dim myResolver As New XmlSecureResolver(New XmlUrlResolver(), "http://myLocalSite/")
XmlSecureResolver myResolver = new XmlSecureResolver(new XmlUrlResolver(), "http://myLocalSite/");
So schränken den Zugriff mithilfe eines Berechtigungssatzes ein
Erstellen Sie ein WebPermission-Objekt.
Dim myWebPermission As New WebPermission(PermissionState.None)
WebPermission myWebPermission = new WebPermission(PermissionState.None);
Beschränken Sie den Zugriff nur auf die zwei folgenden URLs.
myWebPermission.AddPermission(NetworkAccess.Connect, "https://www.contoso.com/") myWebPermission.AddPermission(NetworkAccess.Connect, "http://litwareinc.com/data/")
myWebPermission.AddPermission(NetworkAccess.Connect,"https://www.contoso.com/"); myWebPermission.AddPermission(NetworkAccess.Connect,"http://litwareinc.com/data/");
Fügen Sie dem PermissionSet-Objekt die Webberechtigungen hinzu.
Dim myPermissions As New PermissionSet(PermissionState.None) myPermissions.AddPermission(myWebPermission)
PermissionSet myPermissions = new PermissionSet(PermissionState.None); myPermissions.AddPermission(myWebPermission);
Erstellen Sie mithilfe des Berechtigungssatzes ein XmlSecureResolver-Objekt.
Dim myResolver As New XmlSecureResolver(New XmlUrlResolver(), myPermissions)
XmlSecureResolver myResolver = new XmlSecureResolver(new XmlUrlResolver(), myPermissions);
So beschränken Sie den Zugriff mithilfe von Beweisen ein
Sie können den Zugriff mithilfe 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.
Die folgende Liste enthält einige mögliche Szenarios sowie den Beweistyp, der für jedes Szenario bereitgestellt werden muss.
Sie arbeiten in einer vollständig vertrauenswürdigen Umgebung:
Verwenden Sie die Assembly, um den Beweis zu erstellen.
Dim myEvidence As Evidence = Me.GetType().Assembly.Evidence Dim myResolver As XmlSecureResolver myResolver = New XmlSecureResolver(New XmlUrlResolver(), myEvidence)
Evidence myEvidence = this.GetType().Assembly.Evidence; XmlSecureResolver myResolver; myResolver = new XmlSecureResolver(new XmlUrlResolver(), myEvidence);
Sie arbeiten in einer teilweise vertrauenswürdigen Umgebung und verfügen über Code oder Daten aus einer externen Quelle. Sie kennen den Ursprung der externen Quelle und verfügen über einen überprüfbaren URI:
Verwenden Sie den URI, um den Beweis zu erstellen.
Dim myEvidence As Evidence = XmlSecureResolver.CreateEvidenceForUrl(sourceURI) Dim myResolver As New XmlSecureResolver(New XmlUrlResolver(), myEvidence)
Evidence myEvidence = XmlSecureResolver.CreateEvidenceForUrl(sourceURI); XmlSecureResolver myResolver = new XmlSecureResolver(new XmlUrlResolver(), myEvidence);
Sie arbeiten in einer teilweise vertrauenswürdigen Umgebung, verfügen über Code oder Daten aus einer externen Quelle und kennen den Ursprung der externen Quelle nicht:
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 von "XmlSecureResolver" zum Auflösen von XML-Ressourcen
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 diese Klasse überschreiben, indem Sie das zu verwendende XmlResolver-Objekt angeben. Durch Angeben der XmlSecureResolver-Klasse können Sie die Ressourcen einschränken, auf die die zugrunde liegende XmlResolver-Klasse zugreifen kann.
So erstellen Sie ein "XmlReader"-Objekt, das einen "XmlSecureResolver" verwendet
Erstellen Sie ein XmlSecureResolver-Objekt mit dem richtigen Berechtigungssatz.
Erstellen Sie ein XmlReaderSettings-Objekt, das das XmlSecureResolver-Objekt verwendet.
Dim settings As New XmlReaderSettings() settings.XmlResolver = myResolver
XmlReaderSettings settings = new XmlReaderSettings(); settings.XmlResolver = myResolver;
Verwenden Sie das XmlReaderSettings-Objekt, um das XmlReader-Objekt zu erstellen.
Dim reader As XmlReader = XmlReader.Create("books.xml", settings)
XmlReader reader = XmlReader.Create("books.xml", settings);
So verwenden Sie "XmlSecureResolver" zum Laden eines XSLT-Stylesheets
Erstellen Sie ein XmlSecureResolver-Objekt mit dem richtigen Berechtigungssatz.
Übergeben Sie die XmlSecureResolver an die Load-Methode.
Dim xslt As New XslCompiledTransform() xslt.Load("https://serverName/data/xsl/sort.xsl", Nothing, myResolver)
XslCompiledTransform xslt = new XslCompiledTransform(); xslt.Load("https://serverName/data/xsl/sort.xsl", null, myResolver);