Vorgehensweise: Verwenden der "XmlSecureResolver"-Klasse

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

  1. Erstellen Sie ein WebPermission-Objekt.

    Dim myWebPermission As New WebPermission(PermissionState.None)
    
    WebPermission myWebPermission = new WebPermission(PermissionState.None);
    
  2. 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/");
    
  3. 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);
    
  4. 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

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

  2. 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;
    
  3. 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

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

  2. Ü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);
    

Siehe auch

Weitere Ressourcen

Sicherheit und System.Xml-Anwendungen

XML-Dokumente und XML-Daten