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


Рекомендации по безопасности XSLT

Обновлен: November 2007

Язык 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.

    wk7yxab1.alert_note(ru-ru,VS.90).gifПримечание.

    Функция 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

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

Преобразования XSLT

Управление доступом для кода