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


Безопасность частичного доверия Windows Presentation Foundation

Обновлен: Июль 2008

В общем случае, чтобы избежать злонамеренного повреждения, веб-приложения не должны иметь прямой доступ к критическим системным ресурсам. По умолчанию HTML и клиентские языки сценариев не имеют доступа к критическим системным ресурсам. Поскольку приложения WPF (Windows Presentation Foundation), реализованные в обозревателе, можно запускать из обозревателя, то они должны соответствовать аналогичному набору ограничений. Для принудительного применения этих ограничений WPF использует и CAS (Code Access Security — безопасность доступа кода), и ClickOnce (см. раздел Стратегия безопасности Windows Presentation Foundation — безопасность платформы). По умолчанию в приложения, реализованные в обозревателе, запрашивают набор разрешений зоны Интернета CAS, независимо от того, запускаются ли они из Интернета, из локальной интрасети или с локального компьютера. Приложения, имеющие не полный набор разрешений, выполняются "с частичным доверием".

WPF предоставляет широкую поддержку того, чтобы при частичном доверии можно было безопасно использовать максимально возможную функциональность, и, как и CAS, обеспечивает поддержку программирования с использованием частичного доверия.

В этом разделе содержатся следующие подразделы.

  • Поддержка частичного доверия функциями WPF
  • Программирование с использованием частичного доверия
  • Управление разрешениями
  • Связанные разделы

Поддержка частичного доверия функциями WPF

В следующей таблице перечислены функции высокого уровня WPF (Windows Presentation Foundation), являющиеся безопасными для использования в пределах набора разрешений зоны Интернета.

Таблица 1. Безопасные в частичном доверии функции WPF

Область функций

Функция

Общие

Окно обозревателя

Доступ к узлу источника

IsolatedStorage (ограничение 512KB)

Поставщики UIAutomation

Управление

Редакторы методов ввода (IME)

Перо планшета и рукописный ввод

Моделирование перетаскивания с помощью событий захвата и перемещения мыши

OpenFileDialog

Десериализация языка XAML (с помощью XamlReader.Load)

Веб-интеграция

Диалоговое окно загрузки обозревателя

Верхний уровень инициированной пользователем навигации

ссылки "mailto:"

Параметры универсального кода ресурса (URI)

HTTPWebRequest

Содержимое WPF, размещенное в IFRAME

Размещение HTML-страниц одного веб-узла с помощью элемента управления Frame

Размещение HTML-страниц одного веб-узла с помощью элемента управления WebBrowser

Веб-службы (ASMX)

Веб-службы (использующие Windows Communication Foundation)

Визуальные

2D и 3D

Анимация

Мультимедиа (от узла источника и междоменное)

Обработка изображений/аудио/видео

Чтение

FlowDocuments

Документы XPS

Внедренные и системные шрифты

Шрифты CFF и TrueType

Редактирование

Проверка орфографии

RichTextBox

Поддержка помещения в буфер обмена незашифрованного текста и рукописного ввода

Команда "Вставить" инициированная пользователем

Копирование выбранного содержимого

Элементы управления

Общие элементы управления

В этой таблице приводятся функции WPF высокого уровня. Дополнительные сведения, о разрешениях, необходимых каждому элементу WPF см. в документах Пакет средств разработки программного обеспечения (SDK) для Windows. Кроме того, для следующих функций имеются дополнительные сведения, касающиеся выполнения при частичном доверии, включающие некоторые особенности:

В следующей таблице описываются функции WPF, которые не являются безопасными для выполнения в пределах набора разрешений зоны Интернета:

Таблица 2. Не безопасные в частичном доверии функции WPF

Область функций

Функция

Общие

Окна (определенные приложением окна и диалоговые окна)

SaveFileDialog

Файловая система

Доступ к реестру

Перетаскивание

Сериализация языка XAML (с помощью XamlWriter.Save)

Клиенты UIAutomation

Доступ к окну источника (HwndHost)

Полная поддержка управления речью

Взаимодействие с Windows Forms

Веб-интеграция

Сценарии

Модель DOM

Визуальные

Эффекты для точечных рисунков

Кодировка изображения

Редактирование

Копирование в буфер обмена формата RTF

Полная поддержка языка XAML

Программирование с использованием частичного доверия

Для приложений XBAP код, выходящий за рамки набора разрешений по умолчанию (зона Интернет), будет обнаружен CAS и, как следствие, возникнет исключение безопасности и приложение прекратит работу. И хотя это и защищает пользователей, такое поведение не способствует оптимальному взаимодействию приложения с пользователем.

В общем случае код, который может выходить за рамки доступных разрешений, вероятно, является общим кодом, который доступен как отдельным, так и приложениям, реализованным в обозревателе. CAS и WPF предлагают несколько методов для управления таким сценарием.

Определение разрешений с помощью управления доступом для кода (CAS)

В некоторых случаях общий код в сборках библиотек может использоваться как отдельными приложениями, так и XBAP. В этих случаях код может выполнять функции, которые могут потребовать больше разрешений, чем позволяет набор разрешений, присвоенный приложению. Приложение может определять, имеет ли оно определенные разрешения, используя безопасность Microsoft .NET Framework. В частности, приложение может проверить, обладает ли оно определенным разрешением, вызвав метод Demand для экземпляра нужного разрешения. Это показано в следующем примере, имеющим код, который уточняет, имеет ли он имеет возможность сохранить файл на локальный диск:

Если приложение не имеет нужных разрешений, вызов Demand вызывает исключение безопасности. В противном случае, разрешение было предоставлено. IsPermissionGranted инкапсулирует это поведение и возвращает значения true или false соответственно.

Постепенное снижение функциональности

Возможность обнаружения, имеет ли код разрешения для выполнения необходимых ему действий является выгодной для кода, который может выполняться из различных зон. Определение зоны — это полезная возможность, однако гораздо лучше предоставить выбор пользователю, если возможно. Например, приложение полного доверия обычно позволяет пользователям создавать файлы в любом желаемом месте, в то время как приложение частичного доверия может создавать файлы только в изолированном хранилище. Если код создания файла существует в сборке (DLL), которая совместно используются и полным доверием (отдельные приложения) и частичным доверием (приложения, реализованные в обозревателе), и нужно, чтобы оба приложения давали пользователям возможность создавать файлы, то до создания файла в соответствующем приложении общий код должен определить, выполняется ли он при частичном или полном доверии. Это демонстрируется в следующем коде:

В множестве случаев найти альтернативу частичному доверию можно.

В управляемой среде, такой как интрасеть, настраиваемые управляемые объектные структуры могут быть установлены через клиентскую базу в GAC (global assembly cache — глобальный кэш сборок). Эти библиотеки могут выполнять код, который требует полного доверия, и на них можно ссылаться из приложений, которые допускают только частичное доверие, посредством AllowPartiallyTrustedCallersAttribute (дополнительные сведения см. в разделах Безопасность Windows Presentation Foundation и Стратегия безопасности Windows Presentation Foundation — безопасность платформы).

Определение узла обозревателя

Использование CAS для проверки разрешений является подходящим способом, если необходимо проверять на отдельные разрешения. Однако следует отметить, что перехватывание исключений при использовании этого метода — это неотъемлемая часть нормальной работы. В общем случае не рекомендуется использовать такое поведение, это может повлиять на производительность. Вместо этого, если XBAP (XAML browser application — приложение обозревателя XAML) выполняется только в песочнице зоны Интернета, то можно использовать свойство BrowserInteropHelper.IsBrowserHosted, которое возвращает значение true для XBAP (XAML browser applications — приложения обозревателя XAML).

См. раздел Пример Detecting If Browser-Hosted.

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

Свойство IsBrowserHosted распознает только, выполняется ли приложение в обозревателе, оно не может определить набор разрешений, с которым выполняется приложение.

Управление разрешениями

По умолчанию XBAP выполняется с частичным доверием (набор разрешений зоны Интернета по умолчанию). Однако, в зависимости от требований приложения, можно изменять набор разрешений по умолчанию. Например, если XBAP запускается из локальной интрасети, он может воспользоваться преимуществом расширенного набора разрешений. См. следующую таблицу.

Таблица 3. Разрешения локальной интрасети и Интернета

Разрешение

Атрибут

Локальная интрасеть (LocalIntranet)

Интернет (Internet)

DNS

Доступ к DNS-серверам

Да

Нет

Переменные среды

Чтение

Да

Нет

Диалоговые окна файла

Открытие

Да

Да

Диалоговые окна файла

Без ограничений

Да

Нет

Изолированное хранилище

Изоляция сборки по пользователю

Да

Нет

Изолированное хранилище

Неизвестная изоляция

Да

Да

Изолированное хранилище

Неограниченная квота для пользователя

Да

Нет

Мультимедиа

Безопасное аудио, видео и изображения

Да

Да

Печать

Печать по умолчанию

Да

Нет

Печать

Безопасная печать

Да

Да

Отражение

Эмиссия

Да

Нет

Безопасность

Выполнение управляемого кода

Да

Да

Безопасность

Утверждение предоставленных разрешений

Да

Нет

Пользовательский интерфейс

Без ограничений

Да

Нет

Пользовательский интерфейс

Безопасные окна высокого уровня

Да

Да

Пользовательский интерфейс

Собственный буфер обмена

Да

Да

Веб-обозреватель

Безопасная навигация по рамкам в HTML

Да

Да

Если требуется повысить уровень разрешений, можно использовать одно из следующих средств:

Если XBAP требует полного доверия, то можно использовать те же средства для предоставления запрошенных разрешений, однако XBAP получит полное доверие, только если он установлен и запускается с локального компьютера. Это означает, что не следует сохранять поддержку автоматического обновления при публикации XBAP на веб-серверах.

См. также

Основные понятия

Безопасность Windows Presentation Foundation

Стратегия безопасности Windows Presentation Foundation — безопасность платформы

Стратегия безопасности Windows Presentation Foundation — проектирование безопасности

Журнал изменений

Дата

Изменения

Причина

Июль 2008

Добавлены сведения о новом элементе управления WebBrowser.

Изменение функции SP1.