Безопасность (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 и подключаемые модули
Загрузки
Сценарии
Проверка подлинности пользователя
Коллекция функциональных возможностей, обеспечиваемых таким образом, настраивается на уровне зон Интернет, Интрасеть, Надежные сайты и Ненадежные сайты. Ниже приводятся указания о том, как настроить параметры безопасности.
Откройте панель управления.
Щелкните элемент Сеть и Интернет и выберите Свойства браузера.
Откроется диалоговое окно "Свойства браузера".
На вкладке Безопасность выберите зону, для которой требуется настроить параметры безопасности.
Нажмите кнопку Другой.
Откроется диалоговое окно Параметры безопасности, в котором можно настроить параметры безопасности для выбранной зоны.
Примечание |
---|
Диалоговое окно "Свойства браузера" также можно открыть через 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, обеспечивающих безопасность.
Область |
Ресурс |
---|---|
Управляемый код |
|
CAS |
|
ClickOnce |
|
WPF |
См. также
Основные понятия
Безопасность частичного доверия в WPF
Стратегия безопасности WPF — безопасность платформы
Стратегия безопасности WPF — проектирование безопасности
Развертывание и безопасность технологии ClickOnce
Общие сведения о языке XAML (WPF)