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


Разработка безопасных приложений 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.

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

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

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

  • Задайте значение IsWebMessageEnabledfalse, если вы не ожидаете, что веб-содержимое будет публиковать веб-сообщения в собственном приложении.

  • Задайте значение IsScriptEnabledfalse, если веб-содержимое не должно выполнять скрипты (например, при отображении статического HTML-содержимого).

  • Задайте значение falseAreDefaultScriptDialogsEnabled , если вы не ожидаете отображения alert веб-содержимого или prompt диалоговых окон.

Обновление параметров на основе источника новой страницы

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

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

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

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

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

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

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