Développer des applications WebView2 sécurisées
WebView2 permet aux développeurs d’héberger du contenu web dans les applications natives. Lorsqu’il est utilisé correctement, l’hébergement de contenu web offre plusieurs avantages, tels que l’utilisation de l’interface utilisateur web, l’accès aux fonctionnalités de la plateforme web ou le partage de code multiplateforme.
Dans un navigateur web, les sites web disposent de pouvoirs limités dans un environnement bac à sable( sandbox). Toutefois, lors de l’hébergement de contenu web dans une application native, le contenu web peut accéder aux ressources et AUX API de l’application native. Cela peut entraîner des failles de sécurité si le contenu web n’est pas correctement isolé de l’application hôte. Pour éviter ces vulnérabilités, suivez les pratiques ci-dessous pour améliorer la sécurité de votre application WebView2.
Traiter tout le contenu web comme non sécurisé
Vérifiez toujours l’origine du document qui s’exécute dans WebView2 et évaluez la fiabilité du contenu, en particulier avant d’utiliser
ExecuteScript
,PostWebMessageAsJson
,PostWebMessageAsString
ou toute autre méthode pour envoyer des informations dans le contrôle WebView2. Le contrôle WebView2 a peut-être accédé à une autre page via l’utilisateur final qui interagit avec la page ou le script dans la page à l’origine de la navigation. L’origine du document peut être obtenue à partir de laSource
propriété du contrôle WebView2.Soyez prudent avec
AddScriptToExecuteOnDocumentCreated
. Tous les futursnavigations
exécutent le même script, et si ce script fournit l’accès aux informations destinées uniquement à une certaine origine, tout document HTML peut avoir accès aux ressources et AUX API de l’application native.Validez les messages web et les paramètres de l’objet hôte avant de les consommer, car les messages et paramètres web peuvent être mal formés (involontairement ou malveillantment) et peuvent entraîner un comportement inattendu de l’application.
Lorsque vous examinez le résultat d’un
ExecuteScript
appel de méthode, qui est unWebMessageReceived
événement, vérifiez toujours laSource
propriété du contrôle WebView2 pour vérifier la source de l’expéditeur, ou vérifiez tout autre mécanisme de réception d’informations à partir d’un document HTML dans un contrôle WebView2, pour vérifier que l’URI du document HTML correspond à ce que vous attendez.
Éviter les proxys génériques
Concevez des messages web spécifiques et des interactions d’objet hôte, au lieu d’utiliser des proxys génériques.
Utiliser PostWebMessageAsJson
pour envoyer des messages
Utilisez la PostWebMessageAsJson
méthode pour envoyer des messages au contrôle WebView2. Lors de la construction d’un message à envoyer dans un contrôle WebView2, préférez utiliser PostWebMessageAsJson
et construire le paramètre de chaîne JSON à l’aide d’une bibliothèque JSON. Cela évite tout accident potentiel d’encodage d’informations dans une chaîne ou un script JSON, et garantit qu’aucune entrée contrôlée par un attaquant ne peut modifier le reste du message JSON ou exécuter du code JavaScript arbitraire.
Restreindre les fonctionnalités de contenu web
Restreindre la fonctionnalité de contenu web, si elle n’est pas nécessaire. Mettez à jour les propriétés WebView2 dans CoreWebView2Settings
pour restreindre les fonctionnalités du contenu web, comme suit :
Définissez
AreHostObjectsAllowed
surfalse
, si vous ne vous attendez pas à ce que le contenu web accède aux objets hôtes.Définissez
IsWebMessageEnabled
surfalse
, si vous ne vous attendez pas à ce que le contenu web publie des messages web dans votre application native.Définissez
IsScriptEnabled
surfalse
, si vous ne vous attendez pas à ce que le contenu web exécute des scripts (par exemple, lors de l’affichage de contenu HTML statique).Définissez
AreDefaultScriptDialogsEnabled
surfalse
, si vous ne vous attendez pas à ce que le contenu web affichealert
les dialogues ouprompt
.
Mettre à jour les paramètres en fonction de l’origine de la nouvelle page
Mettez à jour les paramètres en fonction de l’origine de la nouvelle page, comme suit :
Pour empêcher votre application de naviguer vers certaines pages, utilisez les événements et
FrameNavigationStarting
pour vérifier laNavigationStarting
navigation dans les pages ou les cadres, puis bloquez la navigation de manière conditionnelle.Lorsque vous accédez à une nouvelle page, vous devrez peut-être ajuster les valeurs de propriété sur l’objet
CoreWebView2Settings
pour qu’elles correspondent aux exigences de sécurité de la nouvelle page, comme décrit dans Restreindre la fonctionnalité de contenu web, ci-dessus.
Supprimer les objets hôtes exposés
Lorsque vous naviguez vers un nouveau document, utilisez l’événement ContentLoading
et RemoveHostObjectFromScript
pour supprimer les objets hôtes exposés.
WebView2 ne peut pas être exécuté en tant qu’utilisateur système
WebView2 ne peut pas être exécuté en tant qu’utilisateur système. Cette restriction bloque les scénarios tels que la création d’un fournisseur d’informations d’identification.