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


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

Обновлен: Ноябрь 2007

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

Автономные приложения WPF выполняются с неограниченными разрешениями (набор разрешений CAS FullTrust) вне зависимости от того, развертываются ли они с помощью установщика Windows (MSI), DOS XCOPY или ClickOnce.

Приложения WPF на основе обозревателя размещаются с помощью Windows Internet Explorer и могут быть либо XBAP (XAML browser applications — приложения обозревателя XAML), либо свободными Язык XAML (Extensible Application Markup Language) (см. раздел Общие сведения о приложениях обозревателя на языке XAML Windows Presentation Foundation).

Размещаемые в обозревателе приложения WPF по умолчанию выполняются в среде безопасности частичного доверия, которая по умолчанию ограничена набором разрешений CAS Internet. Это эффективно изолирует приложения обозревателя WPF от клиентского компьютера таким же образом, каким изолируются обычные веб-приложения. Безопасность частичного доверия более подробно описана в разделе Безопасность частичного доверия Windows Presentation Foundation.

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

  • Безопасный переход
  • Параметры безопасности Internet Explorer
  • Отключение сборок APTCA для приложений клиентов частичного доверия
  • Выполнение внешнего свободного XAML в изолированной среде
  • Рекомендации по разработке безопасных приложений WPF
  • Связанные разделы

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

В XBAP WPF различает два типа областей переходов: приложение и обозреватель.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Дополнительные сведения о файлах данных приложения и пакетах Коды URI содержатся в разделе Ресурсы, содержимое и файлы данных для приложений Windows Presentation Foundation.

Файлы этих типов содержимого можно просмотреть в результате выполнения пользовательского или программного перехода:

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

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

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

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

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

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

  • Протокол. Используется протокол http:, https:, file: или mailto:.

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

Параметры безопасности Internet Explorer

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

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

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

  • Загрузки

  • Сценарии

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

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

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

  1. Откройте Internet Explorer.

  2. Из меню Средства выберите пункт Параметры | Безопасность.

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

  4. Нажмите кнопку Пользовательский уровень

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

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

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

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

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

  • Документы XPS. Управляет возможностью Internet Explorer 7 переходить к документам Формат XPS (XML Paper Specification) и загружать их. (Параметры "Включить", "Отключить" и "Запрашивать").

  • Включить установку .NET Framework. Управляет возможностью установки .NET Framework с помощью Internet Explorer 7. (Только параметры "Включить" или "Отключить").

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

Параметры безопасности для IE6 и более ранних версий

Для версий Internet Explorer, отличных от Internet Explorer, параметры безопасности для различных параметров безопасности, связанных с .NET Framework, могут быть настроены из реестра в следующем ключе:

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 — разрешить.

XPSDocumentsDisallow

REG_DWORD

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

MediaAudioDisallow

REG_DWORD

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

MediaImageDisallow

REG_DWORD

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

MediaVideoDisallow

REG_DWORD

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

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

Из этих параметров только WebBrowserDisallow и XBAPDisallow работают для всех версий Internet Explorer.

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

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

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

WPF предоставляет механизм, с помощью которого сборка APTCA может быть отключена для частично безопасных приложений WPF включая 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 для включения.

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

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

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

Выполнение внешнего свободного XAML в изолированной среде

Свободные файлы XAML являются XAML-файлами, которые не могут быть идентифицированы с помощью пакета URI (см. раздел URI типа "pack" в Windows Presentation Foundation). Это означает, что они не являются файлами ресурсов, содержимого или начального узла (см. раздел Ресурсы, содержимое и файлы данных для приложений Windows Presentation Foundation).

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

Однако, поведение безопасности изменяется при переходе к свободным файлам 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>

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

Рекомендации по разработке безопасных приложений WPF

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

См. также

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

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

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

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

Обзор развертывания ClickOnce

Общие сведения о XAML

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

Шаблоны и рекомендации по обеспечению безопасности приложений

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