Класс System.Xml.XmlSecureResolver

В этой статье приводятся дополнительные замечания к справочной документации по этому API.

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

Этот параметр по умолчанию можно переопределить, указав используемый XmlResolver объект. Например, если вы хотите ограничить ресурсы, к которым может получить доступ базовый XmlResolverXmlSecureResolver объект, можно использовать объект.

XmlSecureResolver обтекает конкретную реализацию XmlResolver и ограничивает ресурсы, к которым имеет доступ базовый XmlResolver объект. Например, XmlSecureResolver имеет возможность запрета перенаправления между доменами, которая возникает из внедренной ссылки на универсальный идентификатор ресурса (URI).

При создании XmlSecureResolver объекта вы предоставляете допустимую XmlResolver реализацию вместе с URL-адресом, экземпляром объекта доказательства или набором разрешений, который используется XmlSecureResolver для определения безопасности. System.Security.PermissionSet Создается или используется существующий объект, который PermissionSet.PermitOnly вызывается для защиты базовой базы XmlResolverданных.

Важно!

Объекты XmlSecureResolver могут содержать конфиденциальные сведения, например учетные данные пользователей. Будьте осторожны при кэшировании XmlSecureResolver объектов и не должны передавать XmlSecureResolver объект в ненадежный компонент.

Важно!

Существуют различия в инфраструктуре безопасности для кода, выполняемого в среде CLR .NET, и для кода, работающего в среде CLR, интегрированной в Microsoft SQL Server 2005. Это может привести к случаям, когда код, разработанный для .NET CLR, работает по-разному при использовании в интегрированной среде CLR SQL Server. Одно из этих различий влияет на XmlSecureResolver класс при наличии доказательств, основанных на URL-адресе (то есть при использовании CreateEvidenceForUrl(String) метода или конструктора XmlSecureResolver ). Механизм разрешения политик интегрированной среды CLR SQL Server не использует Url сведения или Zone сведения. Вместо этого он предоставляет разрешения на основе GUID, добавляемого сервером при загрузке сборок. При использовании интегрированной XmlSecureResolver среды CLR SQL Server предоставьте все необходимые доказательства непосредственно с помощью указанного.PermissionSet

Использование безопасного сопоставителя

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

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

    XmlReaderSettings settings = new XmlReaderSettings();
    settings.XmlResolver = myResolver;
    
    Dim settings As New XmlReaderSettings()
    settings.XmlResolver = myResolver
    
  3. Передайте объект Create методу XmlReaderSettings при создании XmlReader объекта.

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

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

XmlSecureResolver(XmlResolver, String) Используйте конструктор для создания объекта, который разрешен только для доступа к сайту локальной XmlSecureResolver интрасети.

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

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

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

    WebPermission myWebPermission = new WebPermission(PermissionState.None);
    
    Dim myWebPermission As New WebPermission(PermissionState.None)
    
  2. Укажите URL-адреса, к которым требуется разрешить доступ.

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

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

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

    См. ссылку на другую XmlSecureResolver страницу.

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

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

Ниже приведены некоторые распространенные сценарии и тип доказательств для каждого из них:

  • Если вы работаете в полностью доверенной среде, используйте сборку для создания доказательств:

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

    
    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)
    
  • Если вы работаете в полунадежной среде, и у вас есть код или данные, поступающие из внешнего источника, но вы не знаете источник внешнего источника либо:

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

    –или–

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

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

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

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

    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)