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 d’une interface utilisateur web, l’accès aux fonctionnalités de la plateforme web ou le partage de code entre plateformes.

Dans un navigateur web, les sites web disposent de pouvoirs limités dans un environnement bac à sable. Toutefois, lors de l’hébergement de contenu web dans une application native, le contenu web peut accéder aux ressources et 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 la case activée l’origine du document en cours d’exécution 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 peut avoir navigué vers une autre page via l’utilisateur final interagissant avec la page ou le script de la page à l’origine de la navigation. L’origine du document peut être obtenue à partir de la Source propriété du contrôle WebView2.

  • Faites attention avec AddScriptToExecuteOnDocumentCreated. Tous les futurs navigations exécutent le même script, et si ce script permet d’accéder à des informations qui ne sont destinées qu’à une certaine origine, n’importe quel document HTML peut avoir accès aux ressources et API de l’application native.

  • Validez les messages web et les paramètres d’objet hôte avant de les utiliser. En effet, les messages web et les paramètres peuvent être d’une forme incorrecte (involontairement ou malveillantement) et provoquer 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, case activée toujours la Source propriété du contrôle WebView2 pour case activée la source de l’expéditeur, ou case activée tout autre mécanisme de réception d’informations d’un document HTML dans un contrôle WebView2, pour valider 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, plutôt que 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, privilégiez l’utilisation PostWebMessageAsJson et construisez le paramètre de chaîne JSON à l’aide d’une bibliothèque JSON. Cela évite tout accident potentiel lié au codage d’informations dans une chaîne ou un script JSON et garantit qu’aucune entrée contrôlée par l’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 pour CoreWebView2Settings restreindre la fonctionnalité du contenu Web, comme suit :

  • Définissez AreHostObjectsAllowed la valeur , falsesi vous ne vous attendez pas à ce que le contenu web accède aux objets hôtes.

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

  • falseSi IsScriptEnabled 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 la valeur sur false, si vous ne vous attendez pas à ce que le contenu web s’affiche ou prompt que des dialogues s’affichentalert.

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 d’accéder à certaines pages, utilisez les événements et FrameNavigationStarting pour vérifier la navigation dans les pages ou les NavigationStarting cadres de case activée, puis bloquez conditionnellement la navigation.

  • Lorsque vous naviguez vers une nouvelle page, vous devrez peut-être ajuster les valeurs de propriété sur l’objet pour qu’elles CoreWebView2Settings 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 accédez à un nouveau document, utilisez l’événement pour RemoveHostObjectFromScript supprimer les ContentLoading 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 des scénarios tels que la création d’un fournisseur d’informations d’identification.

Comme meilleure pratique de sécurité, nous vous recommandons d’héberger WebView2 dans un processus qui s’exécute avec l’intégrité utilisateur standard (non élevée). En suivant le principe de moindre privilège, les applications doivent éviter d’exécuter le composant d’hébergement WebView2 avec des privilèges (administrateur) élevés.

Si votre application nécessite des privilèges élevés pour certaines opérations, nous vous recommandons d’isoler ce travail dans un processus séparé et dédié et de maintenir le composant hôte WebView2 élevé. Cela maintient la surface d’hébergement du navigateur au niveau de privilège le plus bas nécessaire et s’aligne sur les pratiques de sécurité des applications Windows recommandées.

Pour une application hôte avec élévation de privilèges, utilisez les indicateurs de remplacement appropriés

Pour un processus d’application hôte WebView2 avec élévation de privilèges, utilisez le type d’indicateurs de remplacement approprié. Un processus élevé est un processus à haut niveau d’intégrité (IL) élevé. Pour aider à protéger les processus élevés de la configuration qui peut être modifiée par les utilisateurs standard, WebView2 ignore certains mécanismes de remplacement à l’échelle de l’utilisateur lorsque le processus hôte s’exécute en mode élevé.

Lorsque le processus hôte s’exécute avec élévation de privilèges :

Les applications WebView2 non élevées respectent tous les mécanismes de remplacement pris en charge.

Voir aussi :

Voir aussi

Documentation Microsoft Edge Entreprise :