Безопасность (WPF)

При разработке приложений Windows Presentation Foundation (WPF) (как браузерных, так и автономных) необходимо принимать во внимание модель безопасности. Автономные приложения WPF выполняются с неограниченными разрешениями (набор разрешений FullTrust в CAS) независимо от способа развертывания (установщик Windows — MSI-файл, средство XCopy или ClickOnce). Развертывание автономных приложений WPF в режиме частичного доверия с помощью ClickOnce не поддерживается. Впрочем, ведущее приложение с полным доверием может создать элемент AppDomain с частичным доверием с помощью модели надстроек .NET Framework. Дополнительные сведения см. в разделе Общие сведения о надстройках WPF.

Браузерные приложения WPF выполняются в браузере Windows Internet Explorer или Firefox и могут представлять собой либо приложения XAML browser applications (XBAPs), либо документы со свободным Extensible Application Markup Language (XAML)-кодом. Дополнительные сведения см. в разделе Общие сведения о приложениях браузера WPF XAML.

Браузерные приложения WPF по умолчанию выполняются в изолированной среде безопасности с частичным доверием, которая ограничена набором разрешений CAS для зоны Интернет по умолчанию. Это фактически изолирует браузерные приложения WPF от клиентского компьютера так же, как изолируются обычные веб-приложения. Модуль XBAP может повысить привилегии вплоть до полного доверия, в зависимости от зоны безопасности, в которой находится URL-адрес развертывания, и конфигурации системы безопасности клиента. Дополнительные сведения см. в разделе Безопасность частичного доверия в WPF.

В этом разделе рассматривается модель безопасности Windows Presentation Foundation (WPF) автономных приложений и приложений, размещаемых в обозревателе.

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

  • Безопасный переход

  • Параметры безопасности для ПО с функциями браузера

  • Элемент управления WebBrowser и элементы управления функциями

  • Отключение сборок APTCA для приложений клиентов частичного доверия

  • Поведение изолированной среды для свободных файлов XAML

  • Ресурсы для разработки приложений WPF, обеспечивающих безопасность

Безопасный переход

В отношении модуля XBAPs среда WPF различает два типа переходов: в приложении и в браузере.

Переход в приложении — это переход между элементами содержимого в пределах приложения, выполняемого в браузере. Переход в браузере — это переход, изменяющий URL-адрес содержимого и расположения в самом браузере. Связь между переходом в приложении (как правило, XAML) и переходом в браузере (как правило, HTML) показана на следующем рисунке.

Схема перехода

Тип содержимого, переход на которое считается безопасным для XBAP, главным образом определяется по тому, какой переход происходит: в приложении или в браузере.

Безопасность перехода приложения

Переход в приложении считается безопасным, если он соответствует коду URI типа "pack", который поддерживает следующие четыре типа содержимого.

Тип содержимого

Описание

Пример URI

Ресурс

Файлы, добавленные в проект с типом построения Ресурс.

pack://application:,,,/MyResourceFile.xaml

Содержимое

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

pack://application:,,,/MyContentFile.xaml

Исходный сайт

Файлы, добавленные в проект с типом построения Нет.

pack://siteoforigin:,,,/MySiteOfOriginFile.xaml

Код приложения

Ресурсы XAML, имеющие скомпилированный код программной части.

-или-

XAML-файлы, добавленные в проект с типом построения Страница.

pack://application:,,,/MyResourceFile.xaml

ПримечаниеПримечание

Дополнительные сведения о файлах данных приложения и URIs типа "pack" содержатся в разделе Ресурсы, Содержимое и Файлы данных WPF-приложения.

К файлам этих типов содержимого разрешены переходы как программным способом, так и по команде пользователя.

  • Пользовательский переход. Пользователь может выполнить переход, щелкнув элемент Hyperlink.

  • Программный переход. Приложение может выполнить переход без участия пользователя, например если задать свойство NavigationWindow.Source.

Безопасность перехода обозревателя

Переход в браузере считается безопасным только при выполнении следующих условий.

  • Пользовательский переход. Пользователь может выполнить переход, щелкнув элемент Hyperlink, расположенный в главном окне NavigationWindow, но не во вложенном элементе Frame.

  • Зона. Содержимое, к которому осуществляется переход, находится в Интернете или локальной сети.

  • Протокол. Используется один из следующих протоколов: http, https, file или mailto.

Если XBAP пытается перейти к содержимому каким-либо способом, не соответствующим этим условиям, генерируется исключение SecurityException.

Параметры безопасности для ПО с функциями браузера

Параметры безопасности компьютера определяют права доступа, предоставляемые любому установленному на нем ПО с функциями веб-браузера. К ПО с функциями браузера относится любое приложение (или компонент), использующее API-интерфейс WinINet или UrlMon, в том числе Internet Explorer и PresentationHost.exe.

Internet Explorer предоставляет механизм, с помощью которого можно настроить функциональные возможности, разрешенные для выполнения в Internet Explorer, в том числе следующие:

  • Компоненты, основанные на .NET Framework

  • Элементы управления ActiveX и подключаемые модули

  • Загрузки

  • Сценарии

  • Проверка подлинности пользователя

Коллекция функциональных возможностей, обеспечиваемых таким образом, настраивается на уровне зон Интернет, Интрасеть, Надежные сайты и Ненадежные сайты. Ниже приводятся указания о том, как настроить параметры безопасности.

  1. Откройте панель управления.

  2. Щелкните элемент Сеть и Интернет и выберите Свойства браузера.

    Откроется диалоговое окно "Свойства браузера".

  3. На вкладке Безопасность выберите зону, для которой требуется настроить параметры безопасности.

  4. Нажмите кнопку Другой.

    Откроется диалоговое окно Параметры безопасности, в котором можно настроить параметры безопасности для выбранной зоны.

    Диалоговое окно “Параметры безопасности”

ПримечаниеПримечание

Диалоговое окно "Свойства браузера" также можно открыть через Internet Explorer.Откройте меню Сервис и выберите пункт Свойства браузера.

В Windows Internet Explorer 7 и более поздних версиях имеются следующие параметры безопасности, относящиеся только к .NET Framework.

  • Свободные XAML. Управляет способностью Internet Explorer переходить к файлам XAML и освобождать их. (Параметры "Включить", "Отключить" и "Запрашивать").

  • Приложения обозревателя XAML. Управляет способностью Internet Explorer переходить к XBAPs и выполнять их. (Параметры "Включить", "Отключить" и "Запрашивать").

По умолчанию все эти параметры включены для зон Интернет, Местная интрасеть и Надежные сайты и отключены для зоны Ненадежные сайты.

Параметры безопасности WPF в реестре

Помимо параметров безопасности в окне "Свойства браузера", для избирательного отключения некоторых функций WPF, связанных с безопасностью, можно использовать следующие значения в реестре. Эти значения определены в следующем разделе реестра:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\Windows Presentation Foundation\Features

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

Имя значения

Тип значения

Данные значения

XBAPDisallow

REG_DWORD

1 — запретить, 0 — разрешить.

LooseXamlDisallow

REG_DWORD

1 — запретить, 0 — разрешить.

WebBrowserDisallow

REG_DWORD

1 — запретить, 0 — разрешить.

MediaAudioDisallow

REG_DWORD

1 — запретить, 0 — разрешить.

MediaImageDisallow

REG_DWORD

1 — запретить, 0 — разрешить.

MediaVideoDisallow

REG_DWORD

1 — запретить, 0 — разрешить.

ScriptInteropDisallow

REG_DWORD

1 — запретить, 0 — разрешить.

Элемент управления WebBrowser и элементы управления функциями

Элемент управления WPF WebBrowser можно использовать для размещения веб-содержимого. Элемент управления WPF WebBrowser служит оболочкой базового элемента управления ActiveX WebBrowser. WPF позволяет обеспечить некоторую степень безопасности в приложении, если ненадежное веб-содержимое размещается в элементе управления WPF WebBrowser. Впрочем, некоторые функции безопасности должны применяться приложениями напрямую с помощью элемента управления WebBrowser. Дополнительные сведения об элементе управления ActiveX WebBrowser см. на странице WebBrowser Control Overviews and Tutorials.

ПримечаниеПримечание

Этот раздел также относится к элементу управления Frame, поскольку он использует элемент WebBrowser для перехода к HTML-содержимому.

Если элемент управления WPF WebBrowser используется для размещения ненадежного веб-содержимого, в приложении следует использовать режим частичного доверия AppDomain для изоляции кода приложения от потенциально вредоносного кода HTML-скриптов. Это особенно важно, если приложение взаимодействует с размещенным скриптом с помощью метода InvokeScript и свойства ObjectForScripting. Дополнительные сведения см. в разделе Общие сведения о надстройках WPF.

Если в приложении используется элемент управления WPF WebBrowser, есть и другой способ повысить уровень безопасности и снизить угрозу атак: включить элементы управления функциями Internet Explorer. Элементы управления функциями — это дополнения к браузеру Internet Explorer, позволяющие администраторам и разработчикам настраивать функции Internet Explorer и приложений, в которых размещается элемент управления ActiveX WebBrowser, оболочкой которого служит элемент управления WPF WebBrowser. Элементы управления функциями можно настроить с помощью функции CoInternetSetFeatureEnabled или путем изменения значений в реестре. Дополнительные сведения об элементах управления функциями см. на страницах Introduction to Feature Controls и Internet Feature Controls.

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

Элемент управления функциями

FEATURE_MIME_HANDLING

FEATURE_MIME_SNIFFING

FEATURE_OBJECT_CACHING

FEATURE_SAFE_BINDTOOBJECT

FEATURE_WINDOW_RESTRICTIONS

FEATURE_ZONE_ELEVATION

FEATURE_RESTRICT_FILEDOWNLOAD

FEATURE_RESTRICT_ACTIVEXINSTALL

FEATURE_ADDON_MANAGEMENT

FEATURE_HTTP_USERNAME_PASSWORD_DISABLE

FEATURE_SECURITYBAND

FEATURE_UNC_SAVEDFILECHECK

FEATURE_VALIDATE_NAVIGATE_URL

FEATURE_DISABLE_TELNET_PROTOCOL

FEATURE_WEBOC_POPUPMANAGEMENT

FEATURE_DISABLE_LEGACY_COMPRESSION

FEATURE_SSLUX

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

Элементы управления функциями применяются процессом, создающим экземпляры объекта ActiveX WebBrowser. Поэтому при разработке автономного приложения, способного переходить к ненадежному содержимому, рекомендуется рассмотреть возможность включения дополнительных элементов управления функциями.

ПримечаниеПримечание

Этот совет основан на общих рекомендациях по безопасности основных приложений MSHTML и SHDOCVW.Дополнительные сведения см. на страницах The MSHTML Host Security FAQ: Part I of II и The MSHTML Host Security FAQ: Part II of II.

При разработке приложения рекомендуется рассмотреть возможность включения следующих элементов управления функциями путем установки значений в реестре на 1.

Элемент управления функциями

FEATURE_ACTIVEX_REPURPOSEDETECTION

FEATURE_BLOCK_LMZ_IMG

FEATURE_BLOCK_LMZ_OBJECT

FEATURE_BLOCK_LMZ_SCRIPT

FEATURE_RESTRICT_RES_TO_LMZ

FEATURE_RESTRICT_ABOUT_PROTOCOL_IE7

FEATURE_SHOW_APP_PROTOCOL_WARN_DIALOG

FEATURE_LOCALMACHINE_LOCKDOWN

FEATURE_FORCE_ADDR_AND_STATUS

FEATURE_RESTRICTED_ZONE_WHEN_FILE_NOT_FOUND

При разработке приложения рекомендуется рассмотреть возможность отключения следующего элемента управления функциями путем установки значения в реестре на 0.

Элемент управления функциями

FEATURE_ENABLE_SCRIPT_PASTE_URLACTION_IF_PROMPT

При использовании модуля XAML browser application (XBAP) с частичным доверием, включающего элемент управления WPF WebBrowser в Windows Internet Explorer, среда WPF размещает элемент управления ActiveX WebBrowser в адресном пространстве процесса Internet Explorer. Поскольку элемент управления ActiveX WebBrowser размещается в процессе Internet Explorer, все элементы управления функциями для Internet Explorer включены также и для элемента управления ActiveX WebBrowser.

Модули XBAP, выполняемые в браузере Internet Explorer, также получают более высокий уровень безопасности по сравнению с обычными автономными приложениями. Этот повышенный уровень безопасности объясняется тем, что в Windows Vista и Windows 7 Internet Explorer (а значит, и элемент управления ActiveX WebBrowser) по умолчанию выполняется в защищенном режиме. Дополнительные сведения о защищенном режиме см. на странице Understanding and Working in Protected Mode Internet Explorer.

ПримечаниеПримечание

При попытке запуска модуля XBAP, содержащего элемент управления WPF WebBrowser, в браузере Firefox при нахождении в зоне "Интернет", генерируется исключение SecurityException.Это обуславливается политикой безопасности WPF.

Отключение сборок APTCA для приложений клиентов частичного доверия

При установке в global assembly cache (GAC) управляемых сборок они становятся полностью безопасными, так как пользователь должен предоставить явное разрешение на их установку. Поскольку они являются полностью безопасными, только полностью безопасные управляемые клиентские приложения могут использовать их. Чтобы разрешить частично безопасным приложениям использовать их, они должны быть помечены AllowPartiallyTrustedCallersAttribute(APTCA). Только сборки, которые были проверены на безопасность выполнения, должны быть помечены этим атрибутом.

Однако, имеется возможность уязвимости безопасности сборки APTCA после установки в GAC. После нахождения уязвимости в безопасности издатели сборок могут создавать обновления безопасности для решения проблемы существующих установок и защититься от установок, которые могут произойти после обнаружения проблемы. Одним из вариантов обновления является удаление сборки, хотя это может прервать работу других полностью доверенных клиентских приложений, использующих сборку.

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

Чтобы отключить сборку APTCA, необходимо создать специальный раздел реестра:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\APTCA\<AssemblyFullName>, FileVersion=<AssemblyFileVersion>

Ниже представлен пример раздела реестра:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy\APTCA\aptcagac, Version=1.0.0.0, Culture=neutral, PublicKeyToken=215e3ac809a0fea7, FileVersion=1.0.0.0

Этот раздел реестра содержит запись для сборки APTCA. В этом разделе также необходимо создать значение, включающее или отключающее сборку. Ниже представлены сведения об этом значении:

  • Имя значения: APTCA_FLAG.

  • Тип значения: REG_DWORD.

  • Данные значения: 1 для отключения; 0 для включения.

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

ПримечаниеПримечание

Сборки ядра .NET Framework не могут быть отключены таким способом, поскольку они необходимы для запуска управляемых приложений.Поддержка отключения сборок APTCA предназначена прежде всего для сторонних разработчиков приложений.

Поведение изолированной среды для свободных файлов XAML

Свободные файлы XAML представляют собой XAML-файлы, содержащие только разметку и не зависящие от каких-либо файлов кода программной части, обработчиков событий или сборок, специфичных для приложения. Когда переход к свободным файлам XAML осуществляется непосредственно из браузера, они загружаются в изолированной среде безопасности в зависимости набора разрешений для зоны "Интернет" по умолчанию.

Однако, поведение безопасности изменяется при переходе к свободным файлам XAML из NavigationWindow или Frame в изолированном приложении.

В обоих случаях свободный файл XAML, к которому осуществляется переход, наследует разрешения от главного приложения. Однако, такое поведение может быть нежелательно с точки зрения безопасности, особенно в том случае, если свободный файл XAML был создан через небезопасную или неизвестную сущность. Этот тип содержимого известен как внешнее содержимое, а Frame и NavigationWindow могут быть настроены так, чтобы изолировать его при переходе. Изоляция достигается установкой свойства SandboxExternalContent в значение true, как показано в следующих примерах для Frame и NavigationWindow:

<Frame 
  Source="ExternalContentPage.xaml" 
  SandboxExternalContent="True">
</Frame>
<!-- Sandboxing external content using NavigationWindow-->
<NavigationWindow 
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation" 
  Source="ExternalContentPage.xaml" 
  SandboxExternalContent="True">
</NavigationWindow>

С этим параметром внешнее содержимое будет загружено в процесс, который отличается от процесса, в котором размещено приложение. Этот процесс ограничен набором разрешений зоны "Интернет" по умолчанию, который изолирует его от главного приложения и клиентского компьютера.

ПримечаниеПримечание

Несмотря на то что переход к файлам свободного XAML из элемента управления NavigationWindow или Frame в автономном приложении реализован на основе инфраструктуры WPF для размещения в браузере, использующей процесс PresentationHost, уровень безопасности при этом чуть ниже, чем при прямой загрузке содержимого в Internet Explorer в Windows Vista и Windows 7 (которая все равно выполняется через процесс PresentationHost). Это объясняется тем, что у автономного приложения WPF, использующего веб-браузер, отсутствует функция безопасности "защищенный режим" браузера Internet Explorer.

Ресурсы для разработки приложений WPF, обеспечивающих безопасность

Ниже приведены ссылки на дополнительные сведения по разработке приложений WPF, обеспечивающих безопасность.

Область

Ресурс

Управляемый код

Patterns and Practices Security Guidance for Applications

CAS

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

ClickOnce

Развертывание и безопасность технологии ClickOnce

WPF

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

См. также

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

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

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

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

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

Развертывание и безопасность технологии ClickOnce

Общие сведения о языке XAML (WPF)

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

Patterns and Practices Security Guidance for Applications