Разработка безопасных приложений 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
чтобы ограничить функциональные возможности веб-содержимого следующим образом:
Установите значение
AreHostObjectsAllowed
false
, если вы не ожидаете, что веб-содержимое будет обращаться к объектам узла.Задайте значение
IsWebMessageEnabled
false
, если вы не ожидаете, что веб-содержимое будет публиковать веб-сообщения в собственном приложении.Задайте значение
IsScriptEnabled
false
, если веб-содержимое не должно выполнять скрипты (например, при отображении статического HTML-содержимого).Задайте значение
false
AreDefaultScriptDialogsEnabled
, если вы не ожидаете отображенияalert
веб-содержимого илиprompt
диалоговых окон.
Обновление параметров на основе источника новой страницы
Обновите параметры на основе источника новой страницы, как показано ниже.
Чтобы предотвратить переход приложения на определенные страницы, используйте
NavigationStarting
события иFrameNavigationStarting
для проверки навигации по страницам или кадрам, а затем условно заблокируйте навигацию.При переходе на новую страницу может потребоваться настроить значения свойств объекта
CoreWebView2Settings
в соответствии с требованиями безопасности новой страницы, как описано выше в разделе Ограничение функциональности веб-содержимого.
Удаление предоставленных объектов узла
При переходе к новому документу ContentLoading
используйте событие и RemoveHostObjectFromScript
, чтобы удалить предоставленные объекты узла.
WebView2 не может быть запущен от имени системного пользователя
WebView2 не может быть запущен от имени системного пользователя. Это ограничение блокирует такие сценарии, как создание поставщика учетных данных.