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 einer webbasierten Benutzeroberfläche, den Zugriff auf Features der Webplattform oder die plattformübergreifende Freigabe von Code.
In einem Webbrowser erhalten Websites eingeschränkte Befugnisse in einer Sandkastenumgebung. Beim Hosten von Webinhalten in einer nativen Anwendung kann der Webinhalt jedoch auf die Ressourcen und APIs der nativen Anwendung zugreifen. Dies kann zu Sicherheitsrisiken führen, wenn der Webinhalt nicht ordnungsgemäß von der Hostanwendung isoliert wird. Um diese Sicherheitsrisiken zu vermeiden, befolgen Sie die folgenden Methoden, um die Sicherheit Ihrer WebView2-Anwendung zu verbessern.
Alle Webinhalte als unsicher behandeln
Überprüfen Sie immer den Ursprung des Dokuments, das in WebView2 ausgeführt wird, und bewerten Sie die Vertrauenswürdigkeit des Inhalts, insbesondere bevor Sie ,
PostWebMessageAsJson
,PostWebMessageAsString
oder eine andere Methode zum Senden von Informationen an das WebView2-Steuerelement verwendenExecuteScript
. Das WebView2-Steuerelement hat möglicherweise zu einer anderen Seite navigiert, indem der Endbenutzer mit der Seite oder dem Skript auf der Seite interagiert und die Navigation verursacht hat. Der Ursprung des Dokuments kann aus derSource
-Eigenschaft des WebView2-Steuerelements abgerufen werden.Seien Sie vorsichtig mit
AddScriptToExecuteOnDocumentCreated
. Alle zukünftigennavigations
Ausführen desselben Skripts, 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, bevor Sie sie verwenden, da Webnachrichten und Parameter (unbeabsichtigt oder böswillig) falsch formatiert sein können und dazu führen können, dass sich die App unerwartet verhält.
Überprüfen Sie beim Untersuchen des Ergebnisses eines
ExecuteScript
Methodenaufrufs, bei dem es sich um einWebMessageReceived
Ereignis handelt, immer dieSource
-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 der URI des HTML-Dokuments ihren Erwartungen entspricht.
Vermeiden generischer Proxys
Entwerfen Sie bestimmte 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, sollten Sie PostWebMessageAsJson
den JSON-Zeichenfolgenparameter mithilfe einer JSON-Bibliothek verwenden und erstellen. Dadurch werden potenzielle Unfälle beim Codieren von Informationen in eine JSON-Zeichenfolge oder ein JSON-Skript vermieden, und es wird sichergestellt, dass keine von Angreifern kontrollierte 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 werden. Aktualisieren Sie die WebView2-Eigenschaften in CoreWebView2Settings
, um die Funktionalität des Webinhalts wie folgt einzuschränken:
Legen Sie auf fest
AreHostObjectsAllowed
false
, wenn Sie nicht erwarten, dass der Webinhalt auf Hostobjekte zugreift.Legen Sie auf
false
festIsWebMessageEnabled
, wenn Sie nicht erwarten, dass der Webinhalt Webnachrichten in Ihrer nativen Anwendung veröffentlicht.Legen Sie auf fest
IsScriptEnabled
false
, wenn Sie nicht erwarten, dass vom Webinhalt Skripts ausgeführt werden (z. B. beim Anzeigen von statischem HTML-Inhalt).Legen Sie auf fest
AreDefaultScriptDialogsEnabled
false
, wenn Sie nicht erwarten, dass der Webinhalt oderprompt
Dialogfelder angezeigt werdenalert
.
Aktualisieren der 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
Ereignisse undFrameNavigationStarting
, um die Seiten- oder Framenavigation zu überprüfen, und blockieren Sie dann die Navigation bedingt.Wenn Sie zu einer neuen Seite navigieren, müssen Sie möglicherweise die Eigenschaftswerte für das
CoreWebView2Settings
Objekt so anpassen, dass sie den Sicherheitsanforderungen der neuen Seite entsprechen, wie oben unter Einschränken der Webinhaltsfunktionalität beschrieben.
Entfernt verfügbar gemachte Hostobjekte
Verwenden Sie beim Navigieren zu einem neuen Dokument 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.