Как использовать класс 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/");
Ограничение доступа с помощью набора разрешений
Создание объекта WebPermission.
Dim myWebPermission As New WebPermission(PermissionState.None)
WebPermission myWebPermission = new WebPermission(PermissionState.None);
Разрешение доступа только следующим двум 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/");
Добавление веб-разрешения к объекту PermissionSet.
Dim myPermissions As New PermissionSet(PermissionState.None) myPermissions.AddPermission(myWebPermission)
PermissionSet myPermissions = new PermissionSet(PermissionState.None); myPermissions.AddPermission(myWebPermission);
Создание объекта 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
Создайте XmlSecureResolver с надлежащим набором разрешений.
Создайте объект XmlReaderSettings, использующий объект XmlSecureResolver.
Dim settings As New XmlReaderSettings() settings.XmlResolver = myResolver
XmlReaderSettings settings = new XmlReaderSettings(); settings.XmlResolver = myResolver;
Используйте объект XmlReaderSettings, чтобы создать объект XmlReader.
Dim reader As XmlReader = XmlReader.Create("books.xml", settings)
XmlReader reader = XmlReader.Create("books.xml", settings);
Использование объекта XmlSecureResolver для загрузки таблицы стилей XSLT
Создайте XmlSecureResolver с надлежащим набором разрешений.
Передать 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);