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


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

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

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

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

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

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

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

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

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

Для XBAPs WPF различает два типа навигации: приложение и браузер.

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

Связь между навигацией приложения и навигацией в браузере.

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

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

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

Тип контента Описание Пример URI
Ресурс Файлы, добавляемые в проект с типом сборки resource. pack://application:,,,/MyResourceFile.xaml
Содержимое Файлы, добавляемые в проект с типом сборки Content. pack://application:,,,/MyContentFile.xaml
Сайт происхождения Файлы, добавляемые в проект с типом сборки None. pack://siteoforigin:,,,/MySiteOfOriginFile.xaml
Код приложения Ресурсы XAML, у которых есть скомпилированный код.

-или-

XAML-файлы, добавляемые в проект с типом сборки Page.
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. Нажмите кнопку "Пользовательский уровень ".

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

    Снимок экрана: диалоговое окно

Замечание

Вы также можете открыть диалоговое окно "Параметры браузера" из Internet Explorer. Щелкните "Сервис" и выберите пункт "Параметры браузера".

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

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

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

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

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

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

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

Имя значения Тип значения Значение
XBAPDisallow REG_DWORD 1, чтобы запретить; 0, чтобы разрешить.
LooseXamlDisallow REG_DWORD 1, чтобы запретить; 0, чтобы разрешить.
ОграничениеДоступаВебБраузера REG_DWORD 1, чтобы запретить; 0, чтобы разрешить.
MediaAudioDisallow REG_DWORD 1, чтобы запретить; 0, чтобы разрешить.
НедопустимостьМедиаИзображения REG_DWORD 1, чтобы запретить; 0, чтобы разрешить.
MediaVideoDisallow REG_DWORD 1, чтобы запретить; 0, чтобы разрешить.
ScriptInteropDisallow REG_DWORD 1, чтобы запретить; 0, чтобы разрешить.

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

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

Замечание

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

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

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

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

Контроль функций
FEATURE_MIME_HANDLING
ФУНКЦИЯ ОПРЕДЕЛЕНИЯ ТИПА ДАННЫХ
КЭШИРОВАНИЕ_ОБЪЕКТА_ФУНКЦИИ
FEATURE_SAFE_BINDTOOBJECT
ОГРАНИЧЕНИЯ ОКНА ФУНКЦИЙ
ПОВЫШЕНИЕ ЗОНЫ ФУНКЦИИ
Функция_Ограничение_СкачиванияФайлов
FEATURE_RESTRICT_ACTIVEXINSTALL
Функция управления дополнениями
FEATURE_HTTP_USERNAME_PASSWORD_DISABLE
Функция_БезопасностьПолосы
ФУНКЦИЯ_UNC_ПРОВЕРКАСОХРАНЕННОГОДАННЫХФАЙЛА
FEATURE_VALIDATE_NAVIGATE_URL
ФУНКЦИЯ_ОТКЛЮЧЕНИЯ_ПРОТОКОЛА_TELNET
FEATURE_WEBOC_POPUPMANAGEMENT
ОТКЛЮЧЕНИЕ_УСТАРЕВШЕГО_СЖАТИЯ
FEATURE_SSLUX

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

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

Замечание

Эта рекомендация основана на общих рекомендациях по безопасности узла MSHTML и SHDOCVW. Дополнительные сведения см. в разделе Вопросы и ответы по безопасности узла MSHTML: часть I из II и Вопросы и ответы по безопасности узла MSHTML: часть II из II.

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

Контроль функций
Функция_ACTIVEX_ОбнаружениеПереназначения
FEATURE_BLOCK_LMZ_IMG
FEATURE_BLOCK_LMZ_OBJECT
FEATURE_BLOCK_LMZ_SCRIPT
ФУНКЦИЯ_ОГРАНИЧЕНИЕ_РЕСУРСА_ДО_LMZ
FEATURE_RESTRICT_ABOUT_PROTOCOL_IE7
ФУНКЦИЯ_ПОКАЗАТЬ_ДИАЛОГ_ПРЕДУПРЕЖДЕНИЯ_ПРОТОКОЛА_ПРИЛОЖЕНИЯ
FEATURE_LOCALMACHINE_LOCKDOWN
FEATURE_FORCE_ADDR_AND_STATUS
ОСОБАЯ_ЗОНА_ОГРАНИЧЕНИЙ_ПРИ_ОТСУТСТВИИ_ФАЙЛА

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

Контроль функций
As the term is technical in nature and should remain untranslated for use in programming or technical documentation, I recommend keeping it as-is: FEATURE_ENABLE_SCRIPT_PASTE_URLACTION_IF_PROMPT

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

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

Замечание

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

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

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

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

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

Чтобы отключить сборку 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 (Windows Presentation Foundation) безопасность частичного доверия WPF

См. также