Partager via


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, PostWebMessageAsStringou 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 la Source propriété du contrôle WebView2.

  • Soyez prudent avec AddScriptToExecuteOnDocumentCreated. Tous les futurs navigations 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 un WebMessageReceived événement, vérifiez toujours la Source 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 sur false, si vous ne vous attendez pas à ce que le contenu web accède aux objets hôtes.

  • Définissez IsWebMessageEnabled sur false, si vous ne vous attendez pas à ce que le contenu web publie des messages web dans votre application native.

  • Définissez IsScriptEnabled sur false, 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 sur false, si vous ne vous attendez pas à ce que le contenu web affiche alert les dialogues ou prompt .

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 la NavigationStarting 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.