Разработка безопасных приложений WebView2

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

В веб-браузере веб-сайтам предоставляются ограниченные возможности в изолированной среде. Однако при размещении веб-контента в собственном приложении веб-содержимое может получать доступ к ресурсам и API собственного приложения. Это может привести к уязвимостям системы безопасности, если веб-содержимое не изолировано должным образом от основного приложения. Чтобы избежать этих уязвимостей, следуйте приведенным ниже рекомендациям для повышения безопасности приложения WebView2.

Рассматривайте все веб-содержимое как небезопасное

  • Всегда проверка источник документа, работающего внутри WebView2, и оценивайте достоверность содержимого, особенно перед использованием ExecuteScript, PostWebMessageAsJson, PostWebMessageAsString, или любого другого метода для отправки информации в элемент управления WebView2. Элемент управления WebView2 мог перейти на другую страницу посредством взаимодействия пользователя со страницей или скриптом на странице, вызвавшим переход. Происхождение документа можно получить из Source свойства элемента управления WebView2.

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

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

  • При проверке результата вызова ExecuteScript методаWebMessageReceived, который является событием, всегда проверка Source свойство элемента управления WebView2 проверка источник отправителя или проверка любой другой механизм получения информации из HTML-документа в элементе управления WebView2, чтобы убедиться, что URI HTML-документа соответствует ожидаемому.

Избегайте универсальных прокси

Разрабатывайте специальные веб-сообщения и взаимодействия с объектами хоста вместо использования универсальных прокси-серверов.

Использование PostWebMessageAsJson для отправки сообщений

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

Ограничение функциональности веб-контента

Ограничьте функциональность веб-содержимого, если оно не требуется. Обновите свойства CoreWebView2Settings WebView2, чтобы ограничить функциональность веб-содержимого, следующим образом:

  • Установите AreHostObjectsAllowed значение false, если вы не ожидаете, что веб-содержимое будет обращаться к объектам host.

  • Установите IsWebMessageEnabled значение false, если вы не ожидаете, что веб-содержимое будет публиковать веб-сообщения в вашем родном приложении.

  • Установите IsScriptEnabled значение false, если вы не ожидаете, что веб-содержимое будет запускать сценарии (например, при показе статического содержимого HTML).

  • Установите AreDefaultScriptDialogsEnabled значение false, если вы не ожидаете, что веб-содержимое будет отображаться alert или prompt отображать диалоговые окна.

Обновление параметров в зависимости от происхождения новой страницы

Обновите параметры на основе происхождения новой страницы, как указано ниже.

  • Чтобы запретить приложению переход на определенные страницы, используйте NavigationStarting события and FrameNavigationStarting для проверки навигации по страницам или кадрам, а затем условно заблокируйте переход.

  • При переходе на новую страницу может потребоваться настроить значения свойств объекта CoreWebView2Settings в соответствии с требованиями безопасности новой страницы, как описано в разделе " Ограничение функциональности веб-содержимого" выше.

Удаление открытых узловых объектов

При переходе к новому документу используйте это ContentLoading событие для RemoveHostObjectFromScript удаления открытых объектов узла.

WebView2 невозможно запустить от имени системного пользователя

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

В целях безопасности рекомендуется размещать WebView2 в процессе, который выполняется со стандартной (без повышенных) прав целостности пользователя. Следуя принципу минимальных привилегий, приложения должны избегать запуска компонента WebView2-hosting с повышенными правами (администратора).

Если приложению требуются повышенные привилегии для выполнения определенных операций, рекомендуется изолировать эту работу в отдельном выделенном процессе и понизить права хост-компонента WebView2. Это позволяет использовать самый низкий уровень привилегий для поверхности размещения в браузере и соответствует рекомендуемым методикам безопасности приложений Windows.

Для ведущего приложения с повышенными правами используйте соответствующие флаги переопределения

Для процесса ведущего приложения WebView2 с повышенными правами используйте соответствующий тип флагов переопределения. Процесс с повышенными правами — это процесс с высоким уровнем целостности (High IL). Чтобы защитить процессы с повышенными правами от конфигурации, которые могут быть изменены обычными пользователями, WebView2 игнорирует определенные механизмы переопределения на уровне пользователя при выполнении хост-процесса с повышенными привилегиями.

При выполнении основного процесса с повышенными привилегиями:

Приложения WebView2 без повышенных прав учитывают все поддерживаемые механизмы переопределения.

См. также:

См. также