Entwickeln sicherer WebView2-Apps

WebView2 ermöglicht Entwicklern das Hosten von Webinhalten in den nativen Anwendungen. Bei richtiger Verwendung bietet das Hosten von Webinhalten mehrere Vorteile, z. B. die Verwendung der webbasierten Benutzeroberfläche, den Zugriff auf Funktionen der Webplattform oder die plattformübergreifende gemeinsame Nutzung von Code.

In einem Webbrowser werden Websites in einer Sandkastenumgebung eingeschränkte Befugnisse eingeräumt. Wenn Webinhalte jedoch in einer nativen Anwendung gehostet werden, können die Webinhalte auf die Ressourcen und APIs der nativen Anwendung zugreifen. Dies kann zu Sicherheitsrisiken führen, wenn der Webinhalt nicht ordnungsgemäß von der Hostanwendung isoliert ist. Um diese Sicherheitsanfälligkeiten zu vermeiden, befolgen Sie die folgenden Methoden, um die Sicherheit Ihrer WebView2-Anwendung zu verbessern.

Alle Webinhalte als unsicher behandeln

  • Überprüfen Sie immer die Herkunft des Dokuments, das in WebView2 ausgeführt wird, und bewerten Sie die Vertrauenswürdigkeit des Inhalts, insbesondere bevor Sie , PostWebMessageAsJsonPostWebMessageAsString, oder eine andere Methode verwendenExecuteScript, um Informationen an das WebView2-Steuerelement zu senden. Möglicherweise ist das WebView2-Steuerelement über den Endbenutzer, der mit der Seite interagiert, oder über das Skript auf der Seite, die die Navigation verursacht, zu einer anderen Seite navigiert. Der Ursprung des Dokuments kann aus der Source Eigenschaft des WebView2-Steuerelements abgeleitet werden.

  • Seien Sie vorsichtig mit AddScriptToExecuteOnDocumentCreated. Alle zukünftigen navigations Skripts führen dasselbe Skript aus, und wenn dieses Skript Zugriff auf Informationen bietet, die nur für einen bestimmten Ursprung vorgesehen sind, kann jedes HTML-Dokument Zugriff auf die Ressourcen und APIs der nativen Anwendung haben.

  • Überprüfen Sie Webnachrichten und Hostobjektparameter vor ihrer Nutzung, da Webnachrichten und Parameter falsch formatiert sein können (unbeabsichtigt oder böswillig) und zu unerwartetem Verhalten der App führen können.

  • Überprüfen Sie beim Überprüfen des Ergebnisses eines ExecuteScript Methodenaufrufs, bei dem es sich um ein WebMessageReceived Ereignis handelt, immer die Source Eigenschaft des WebView2-Steuerelements, um die Quelle des Absenders zu überprüfen, oder überprüfen Sie einen anderen Mechanismus zum Empfangen von Informationen aus einem HTML-Dokument in einem WebView2-Steuerelement, um zu überprüfen, ob die URI des HTML-Dokuments Ihren Erwartungen entspricht.

Vermeiden Sie generische Proxys

Entwerfen Sie spezifische Webnachrichten und Hostobjektinteraktionen, anstatt generische Proxys zu verwenden.

Zum Senden von Nachrichten verwenden PostWebMessageAsJson

Verwenden Sie die PostWebMessageAsJson Methode, um Nachrichten an das WebView2-Steuerelement zu senden. Wenn Sie eine Nachricht erstellen, die an ein WebView2-Steuerelement gesendet werden soll, bevorzugen Sie die Verwendung PostWebMessageAsJson und erstellen Sie den JSON-Zeichenfolgenparameter mithilfe einer JSON-Bibliothek. Dadurch werden potenzielle Unfälle beim Codieren von Informationen in eine JSON-Zeichenfolge oder ein JSON-Skript vermieden und sichergestellt, dass keine vom Angreifer gesteuerte Eingabe den Rest der JSON-Nachricht ändern oder beliebigen JavaScript-Code ausführen kann.

Einschränken der Webinhaltsfunktionalität

Schränken Sie die Funktionalität von Webinhalten ein, wenn sie nicht benötigt wird. Aktualisieren Sie die WebView2-Eigenschaften CoreWebView2Settings , um die Funktionalität der Webinhalte wie folgt einzuschränken:

  • Legen Sie diese Option AreHostObjectsAllowed auf falsefest, wenn Sie nicht erwarten, dass der Webinhalt auf Hostobjekte zugreift.

  • Legen Sie diese Option IsWebMessageEnabled auf falsefest, wenn Sie nicht erwarten, dass der Webinhalt Webnachrichten an Ihre native Anwendung sendet.

  • Legen Sie diese Option auf IsScriptEnabledfalsefest, wenn Sie nicht erwarten, dass der Webinhalt Skripts ausführt (z. B. wenn statische HTML-Inhalte angezeigt werden).

  • Legen Sie diese Option AreDefaultScriptDialogsEnabled auf falsefest, wenn Sie nicht erwarten, dass der Webinhalt oder prompt Dialogfelder angezeigt werdenalert.

Aktualisieren von Einstellungen basierend auf dem Ursprung der neuen Seite

Aktualisieren Sie die Einstellungen basierend auf dem Ursprung der neuen Seite wie folgt:

  • Um zu verhindern, dass Ihre Anwendung zu bestimmten Seiten navigiert, verwenden Sie die NavigationStarting UND-Ereignisse FrameNavigationStarting , um die Seiten- oder Framenavigation zu überprüfen, und blockieren Sie dann bedingt die Navigation.

  • Wenn Sie zu einer neuen Seite navigieren, müssen Sie möglicherweise die Eigenschaftswerte des CoreWebView2Settings Objekts an die Sicherheitsanforderungen der neuen Seite anpassen, wie unter Einschränken der Webinhaltsfunktionalität weiter oben beschrieben.

Entfernen von verfügbar gemachten Hostobjekten

Wenn Sie zu einem neuen Dokument navigieren, verwenden Sie das ContentLoading Ereignis und RemoveHostObjectFromScript um verfügbar gemachte Hostobjekte zu entfernen.

WebView2 kann nicht als Systembenutzer ausgeführt werden

WebView2 kann nicht als Systembenutzer ausgeführt werden. Diese Einschränkung blockiert Szenarien wie das Erstellen eines Anmeldeinformationsanbieters.

Als bewährte Sicherheitsmethode empfehlen wir, WebView2 in einem Prozess zu hosten, der mit standardmäßiger Benutzerintegrität (ohne erhöhte Rechte) ausgeführt wird. Gemäß dem Prinzip der geringsten Rechte sollten Anwendungen es vermeiden, die WebView2-Hostingkomponente mit erhöhten (Administrator-)Rechten auszuführen.

Wenn Ihre Anwendung für bestimmte Vorgänge erhöhte Berechtigungen erfordert, wird empfohlen, diese Arbeit in einem separaten, dedizierten Prozess zu isolieren und die WebView2-Hostkomponente ohne erhöhte Rechte zu halten. Dadurch bleibt die Browser-Hostingoberfläche auf der niedrigsten Berechtigungsstufe und entspricht den empfohlenen Sicherheitspraktiken für Windows-Anwendungen.

Verwenden Sie für eine Host-App mit erhöhten Rechten geeignete Überschreibungsflags.

Verwenden Sie für einen WebView2-Host-App-Prozess mit erhöhten Rechten den entsprechenden Typ von Override-Flags. Ein Prozess mit erhöhten Rechten ist ein Prozess mit hoher Integritätsebene (High Integrity Level, hoher IL). Um Prozesse mit erhöhten Rechten vor Konfigurationen zu schützen, die von Standardbenutzern geändert werden können, ignoriert WebView2 bestimmte benutzerbezogene Außerkraftsetzungsmechanismen, wenn der Hostprozess mit erhöhten Rechten ausgeführt wird.

Wenn der Hostprozess mit erhöhten Rechten ausgeführt wird:

WebView2-Apps ohne erhöhte Rechte berücksichtigen alle unterstützten Außerkraftsetzungsmechanismen.

Siehe auch:

Siehe auch

Dokumentation für Microsoft Edge Enterprise: