Рекомендации по безопасности XSLT
Язык XSLT обладает широким набором функций с большими возможностями и обеспечивает гибкость применения. В него входит много функций, которые полезны, но могут злонамеренно использоваться внешними источниками. Чтобы использовать XSLT безопасно, необходимо иметь представление о проблемах безопасности, сопряженных с использованием XSLT, и основных стратегиях, применяемых для снижения этих рисков.
Расширения XSLT
Двумя популярными расширениями XSLT являются скрипты в таблице стилей и объекты расширения. Эти расширения позволяют процессору XSLT выполнять программный код.
Объекты расширения добавляют возможности программирования к преобразованиям XSL.
Можно внедрять скрипты в таблицу стилей с помощью элемента расширения msxsl:script.
Объекты расширения
Расширяемые объекты добавляются с помощью метода AddExtensionObject. Для поддержки расширяемых объектов необходим набор разрешений FullTrust. Это гарантирует, что во время выполнения кода из расширяемого объекта не произойдет повышение разрешений. Попытка вызова метода AddExtensionObject при отсутствии разрешений FullTrust приведет к исключению безопасности.
Скрипты в таблицах стилей
Можно внедрять скрипты в таблицу стилей с помощью расширяемого элемента msxsl:script. Поддержка скриптов является дополнительной функцией класса XslCompiledTransform, которая по умолчанию отключена. Чтобы включить скрипты, установите свойство XsltSettings.EnableScript в значение true и передайте объект XsltSettings методу Load.
Рекомендации
Включайте скрипты только в том случае, если таблица стилей получена из доверенного источника. Если нельзя проверить источник таблицы стилей или таблица стилей получена из ненадежного источника, передайте значение null для аргумента параметров XSLT.
Внешние ресурсы
Язык XSLT обладает функциями, такими как xsl:import, xsl:include и document(), в которых процессору необходимо разрешать URI-ссылки. Класс XmlResolver используется для разрешения внешних ресурсов. Внешние ресурсы может понадобиться разрешать в следующих двух случаях:
если во время компиляции таблицы стилей для разрешения xsl:import и xsl:include используется объект XmlResolver;
если во время выполнения преобразования для разрешения функции document() используется объект XmlResolver.
Примечание
Функция document() по умолчанию отключена в классе XslCompiledTransform.Чтобы включить эту функцию, установите свойство XsltSettings.EnableDocumentFunction в значение true и передайте объект XsltSettings методу Load.
Методы Load и Transform имеют перегруженные версии, принимающие объект XmlResolver в качестве одного из аргументов. Если XmlResolver не указан, используется XmlUrlResolver по умолчанию без учетных данных.
Рекомендации
Включайте функцию document() только в том случае, если таблица стилей получена из доверенного источника.
Следующий список описывает, когда может потребоваться указать объект XmlResolver:
Если процессу XSLT требуется доступ к сетевому ресурсу, требующему проверки подлинности, можно использовать XmlResolver с необходимыми учетными данными.
Если необходимо ограничить ресурсы, к которым имеет доступ процесс XSLT, можно использовать XmlSecureResolver с надлежащим набором разрешений. Использовать класс XmlSecureResolver рекомендуется, если вам необходимо открыть ресурс, которым вы не управляете или к которому нет доверия.
Если необходимо настроить поведение особым образом, можно реализовать собственный класс XmlResolver и использовать его для разрешения ресурсов.
Если необходимо убедиться в отсутствии доступа к внешним ресурсам, можно указать null в качестве значения аргумента XmlResolver.
См. также
Основные понятия
Рекомендации по безопасности System.Xml
Разрешение внешних ресурсов в ходе обработки XSLT