Поделиться через


Как использовать класс XmlSecureResolver

Класс XmlSecureResolver помогает защитить другой объект XmlResolver, заключая объект XmlResolver в обертку и ограничивая ресурсы, к которым имеет доступ базовый XmlResolver. Например, класс XmlSecureResolver может запрещать доступ к определенным узлам или зонам Интернета.

Ограничение доступа с помощью URL-адреса

  • Создание объекта XmlSecureResolver, которому разрешен доступ только к локальному внутреннему узлу.

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

Ограничение доступа с помощью набора разрешений

  1. Создание объекта WebPermission.

    Dim myWebPermission As New WebPermission(PermissionState.None)
    
    WebPermission myWebPermission = new WebPermission(PermissionState.None);
    
  2. Разрешение доступа только следующим двум URL-адресам.

    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. Добавление веб-разрешения к объекту PermissionSet.

    Dim myPermissions As New PermissionSet(PermissionState.None)
    myPermissions.AddPermission(myWebPermission)
    
    PermissionSet myPermissions = new PermissionSet(PermissionState.None);
    myPermissions.AddPermission(myWebPermission);
    
  4. Создание объекта XmlSecureResolver с помощью набора разрешений.

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

Ограничение доступа с помощью свидетельства

  • Доступ можно ограничить с помощью объекта Evidence. Объект Evidence используется для создания объекта PermissionSet, который применяется к основному объекту XmlResolver. Объект XmlSecureResolver вызывает метод PermitOnly на созданном объекте PermissionSet перед открытием каких-либо ресурсов.

    В следующем списке приведено несколько возможных сценариев и тип свидетельства для каждого сценария.

    • Пользователь работает в среде с полным уровнем доверия.

      Используйте собственную сборку для создания свидетельства.

      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);
      
    • Пользователь работает в среде со средним уровнем доверия и получает код или данные из внешнего источника. Известно происхождение внешнего источника, и существует поддающийся проверке URI.

      Используйте URI для создания свидетельства.

      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);
      
    • Пользователь работает в среде со средним уровнем доверия и получает код или данные из внешнего источника и неизвестно происхождение внешнего источника.

      Установите для параметра evidence значение null. Это сделает ресурсы недоступными.

      или

      Если приложению необходим доступ к ресурсам, нужно запросить свидетельство у вызывающего.

Использование объекта XmlSecureResolver для разрешения ресурсов XML

Класс XmlUrlResolver является арбитром по умолчанию для всех классов пространства имен System.Xml. Он используется для загрузки XML-документов и для разрешения таких внешних ресурсов, как сущности, DTD или схемы, а также для импорта или включения директив.

Можно переопределить это, указав для использования объект XmlResolver. С помощью указания объекта XmlSecureResolver можно ограничить ресурсы, к которым может получить доступ базовый объект XmlResolver.

Создание объекта XmlReader, использующего объект XmlSecureResolver

  1. Создайте XmlSecureResolver с надлежащим набором разрешений.

  2. Создайте объект XmlReaderSettings, использующий объект XmlSecureResolver.

    Dim settings As New XmlReaderSettings()
    settings.XmlResolver = myResolver
    
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.XmlResolver = myResolver;
    
  3. Используйте объект XmlReaderSettings, чтобы создать объект XmlReader.

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

Использование объекта XmlSecureResolver для загрузки таблицы стилей XSLT

  1. Создайте XmlSecureResolver с надлежащим набором разрешений.

  2. Передать XmlSecureResolver методу Load.

    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);
    

См. также

Другие ресурсы

Безопасность и приложения System.Xml

XML-документы и данные