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

При разработке автономных и браузерных приложений Windows Presentation Foundation (WPF) необходимо продумать модель безопасности. Автономные приложения WPF выполняются с неограниченными разрешениями (набор разрешений CASFullTrust), если развертываются с помощью установщика Windows (.msi), XCopy или ClickOnce. Развертывание автономных приложений WPF с частичным доверием с помощью ClickOnce не поддерживается. Тем не менее ведущее приложение с полным доверием может создать AppDomain с частичным доверием с помощью модели надстроек .NET Framework. Более подробную информацию см. в статье Общие сведения о надстройках WPF.

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

Предупреждение

Для работы XBAPs требуются устаревшие браузеры, такие как интернет-Обозреватель и Firefox. Эти старые версии браузера обычно не поддерживаются в Windows 10 и Windows 11. Современные браузеры больше не поддерживают технологию, необходимую для приложений XBAP из-за рисков безопасности. Подключаемые модули, поддерживающие XBAP, больше не поддерживаются.

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

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

Этот раздел состоит из следующих подразделов.

Безопасная навигация

Для приложений XBAP в WPF предусмотрено два типа навигации: в приложении и в браузере.

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

Relationship between application navigation and browser navigation.

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

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

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

Тип содержимого Description Пример URI
Ресурс Файлы, добавленные в проект с типом сборки Ресурс. pack://application:,,,/MyResourceFile.xaml
Содержимое Файлы, добавленные в проект с типом сборки Содержимое. pack://application:,,,/MyContentFile.xaml
Исходный веб-сайт Файлы, добавленные в проект с типом сборки Нет. pack://siteoforigin:,,,/MySiteOfOriginFile.xaml
Код приложения Ресурсы XAML, имеющие скомпилированный код программной части.

–или–

Файлы XAML, добавленные в проект с типом сборки Страница.
pack://application:,,,/MyResourceFile .xaml

Примечание.

Дополнительные сведения о файлах данных приложения и кодах URI пакета см. в статье Ресурсы, содержимое и файлы данных 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. Нажмите кнопку Другой.

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

    Screenshot that shows the Security Settings dialog box.

Примечание.

К диалоговому окну "Свойства обозревателя" можно также перейти из Internet Explorer. Последовательно щелкните элементы Сервис и Свойства обозревателя.

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

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

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

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

Помимо параметров безопасности, доступных в окне "Свойства обозревателя", для избирательного отключения некоторых функций 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 и соответствующие руководства.

Примечание.

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

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

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

Если вы разрабатываете автономное приложение 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. Дополнительные сведения см. в документах Вопросы и ответы, касающиеся безопасности узла MSHTML. Часть 1 из 2 и Вопросы и ответы, касающиеся безопасности узла MSHTML. Часть 2 из 2.

Для исполняемого файла можно включить следующие элементы управления функциями путем установки значения реестра равным 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 (XBAP) с частичным доверием, включающим элемент управления WPF WebBrowser в Windows Internet Explorer, WPF размещает элемент управления ActiveX WebBrowser в адресном пространстве процесса Internet Explorer. Так как элемент ActiveX WebBrowser размещается в процессе Internet Explorer, все элементы управления функциями для Internet Explorer также включены для элементов ActiveX WebBrowser.

XBAP-приложения, выполняющиеся в Internet Explorer, также получают более высокий уровень безопасности по сравнению с обычными автономными приложениями. Этот повышенный уровень безопасности назначается, потому что Internet Explorer и, следовательно, элемент управления ActiveX WebBrowser выполняются в защищенном режиме по умолчанию в Windows Vista и Windows 7. Дополнительные сведения о защищенном режиме см. в статье Общие сведения о защищенном режиме Internet Explorer и работа в нем.

Примечание.

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

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

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

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

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

Чтобы отключить сборку 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="http://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, обеспечивающих безопасность:

Площадь Ресурс
Управляемый код Шаблоны и рекомендации по обеспечению безопасности приложений
CAS Управление доступом для кода
ClickOnce Развертывание и безопасность технологии ClickOnce
WPF Безопасность частичного доверия в WPF

См. также