ASP.NET Core Blazor Hybrid Sicherheitsaspekte
Hinweis
Dies ist nicht die neueste Version dieses Artikels. Die aktuelle Version finden Sie in der .NET 9-Version dieses Artikels.
Warnung
Diese Version von ASP.NET Core wird nicht mehr unterstützt. Weitere Informationen finden Sie in der .NET- und .NET Core-Supportrichtlinie. Die aktuelle Version finden Sie in der .NET 9-Version dieses Artikels.
Wichtig
Diese Informationen beziehen sich auf ein Vorabversionsprodukt, das vor der kommerziellen Freigabe möglicherweise noch wesentlichen Änderungen unterliegt. Microsoft gibt keine Garantie, weder ausdrücklich noch impliziert, hinsichtlich der hier bereitgestellten Informationen.
Die aktuelle Version finden Sie in der .NET 9-Version dieses Artikels.
Dieser Artikel beschreibt die Sicherheitsaspekte für Blazor Hybrid Apps.
Blazor Hybrid Apps, die Webinhalte rendern, führen .NET-Code innerhalb einer Plattform Web View aus. Der .NET-Code interagiert mit dem Webinhalt über einen Interop-Kanal zwischen dem .NET-Code und dem Web View.
Der in den Web View gerenderte Webinhalt kann von durch die App bereitgestellten Ressourcen stammen, aus einem der folgenden Speicherorte:
- Der
wwwroot
Ordner in der App. - Eine Externe Quelle außerhalb der App. Beispielsweise eine Netzwerkquelle wie das Internet.
Es existiert eine Vertrauensgrenze zwischen dem .NET-Code und dem Code, der innerhalb des Web View ausgeführt wird. .NET-Code wird von der App und von allen vertrauenswürdigen Drittanbieterpaketen bereitgestellt, die Sie installiert haben. Nachdem die App erstellt wurde, können sich die .NET-Code Web View Inhaltsquellen nicht ändern.
Im Gegensatz zu den .NET-Codequellen von Inhalten können Inhaltsquellen aus dem innerhalb der Web View ausgeführten Code nicht nur aus der App, sondern auch aus externen Quellen stammen. Beispielsweise können statische Ressourcen aus einem externen Content Delivery Network (CDN) vom Web View einer App verwendet oder gerendert werden.
Betrachten Sie den Code innerhalb des Web View in der gleichen Weise als nicht vertrauenswürdig wie den Code, der im Browser für eine Web-App ausgeführt wird, und nicht vertrauenswürdig ist. Für nicht vertrauenswürdige Ressourcen in Blazor Hybrid Apps gelten die gleichen Bedrohungen und allgemeinen Sicherheitsempfehlungen wie für andere Arten von Apps.
Vermeiden Sie wenn möglich das Laden von Inhalten aus einem Drittanbieter-Ursprung. Um das Risiko zu verringern, können Sie Inhalte möglicherweise direkt aus der App bereitstellen, indem Sie die externen Ressourcen herunterladen. Stellen Sie sicher, dass sie für Benutzende sicher sind, und fügen Sie diese in den Ordner wwwroot
der App für die Paketerstellung mit dem rest der App ein. Wir empfehlen externe Inhalte, die zur Aufnahme in die App heruntergeladen werden, nach Viren und Schadsoftware zu scannen, bevor sie in den wwwroot
Ordner der App eingefügt werden.
Es wird empfohlen, dass Sie gängige Websicherheitsansätze verwenden, wenn Ihre App auf Inhalte externen Ursprungs verweisen muss. So kann der Inhalt am Laden gehindert werden, wenn er kompromittiert wurde:
- Stellen Sie Inhalte sicher mit TLS/HTTPS bereit.
- Führen Sie eine Content Security Policy (CSP) ein.
- Führen Sie Überprüfungen der Subressourcenintegrität durch.
Auch wenn alle Ressourcen in die App gepackt sind und nicht aus externen Ursprüngen laden, bleiben Sie vorsichtig bei Problemen im Code der Ressource, der innerhalb der Web View ausgeführt wird, da die Ressourcen möglicherweise Anfälligkeiten haben, die cross-site scripting (XSS) Angriffe zulassen könnten.
Im Allgemeinen schützt das Blazor Framework vor XSS, indem es sicher mit HTML umgeht. Jedoch ermöglichen einige Programmiermuster Razor Komponenten das Einfügen von rohem HTML in die gerenderte Ausgabe, wie z. B. das Rendering von Inhalten aus einer nicht vertrauenswürdigen Quelle. Beispielsweise sollte das Rendering von HTML-Inhalten direkt aus einer Datenbank vermieden werden. Darüber hinaus können von der App verwendete JavaScript-Bibliotheken HTML auf unsichere Arten verändern um versehentlich oder absichtlich unsichere Ausgaben zu rendern.
Aus diesen Gründen wird empfohlen, die gleichen Schutzmaßnahmen gegen XSS anzuwenden, welche normalerweise auf Web-Apps angewendet werden. Verhindern Sie das Laden von Skripts aus unbekannten Quellen und implementieren Sie keine potenziell unsicheren JavaScript-Features, wie z. B. eval
und andere unsichere JavaScript-Grundtypen. Die Einrichtung eines CSP wird empfohlen um diese Sicherheitsrisiken zu verringern.
Wenn der Code innerhalb der Web View kompromittiert ist, erhält der Code Zugriff auf alle Inhalte innerhalb der Web View und könnte über den Interop-Kanal mit dem Host interagieren. Aus diesem Grund müssen alle Inhalte, die aus dem Web View (Ereignisse, JS-Interop) stammen, als nicht vertrauenswürdig behandelt werden und genauso wie andere vertrauliche Kontexte überprüft werden, z. B. in einer kompromittierten Blazor Server App, die zu böswilligen Angriffen auf das Hostsystem führen kann.
Speichern Sie keine vertraulichen Informationen, wie z. B. Anmeldeinformationen, Sicherheitstoken oder vertrauliche Benutzerdaten, im Kontext des Web View, da diese Informationen Cyberkriminellen zur Verfügung stehen, sobald der Web View kompromittiert ist. Es gibt sicherere Alternativen, wie z. B. den Umgang mit vertraulichen Informationen direkt innerhalb des nativen Teils der App.
Externer Inhalt, der in einem iframe
gerendert wird
Wenn Sie einen iframe
verwenden, um externe Inhalte auf einer Blazor Hybrid-Seite anzuzeigen, sollten Benutzer Sandboxfeatures nutzen, um sicherzustellen, dass der Inhalt von der übergeordneten Seite, welche die App enthält, isoliert ist. Im folgenden Razor-Komponentenbeispiel enthält das <iframe>
-Tag das sandbox
-Attribut, um Sandboxfeatures auf die admin.html
-Seite anzuwenden:
<iframe sandbox src="https://contoso.com/admin.html" />
Warnung
Das sandbox
-Attribut wird in frühen Browserversionen nicht unterstützt. Weitere Informationen finden Sie auf der Can I use-Website zu sandbox
.
Links zu externen URLs
Links zu URLs außerhalb der App werden in einer entsprechenden externen App geöffnet und nicht innerhalb der Web View geladen. Es wird nicht empfohlen, das Standardverhalten außer Kraft zu setzen.
Halten Sie den Web View in bereitgestellten Apps aktuell.
Der BlazorWebView Regler verwendet den momentan installierten, plattformspezifischen nativen Web View. Da die native Web View regelmäßig mit Unterstützung für neue APIs und Korrekturen für Sicherheitsprobleme aktualisiert wird, müssen Sie möglicherweise sicherstellen, dass eine App eine Web View-Version verwendet, die die Anforderungen der App erfüllt.
Verwenden Sie einen der folgenden Ansätze, um die aktuelle Web View in bereitgestellten Apps beizubehalten:
- Auf allen Plattformen: Überprüfen Sie die Web View-Version, und fordern Sie den Benutzer bzw. die Benutzerin auf, alle erforderlichen Schritte auszuführen, um sie zu aktualisieren.
- Nur unter Windows: Packen Sie eine Web Viewmit fester Version in der App, und verwenden Sie sie anstelle der freigegebenen Web View des Systems.
Android
Die Android-Web View wird über den Google Play Store verteilt und aktualisiert. Überprüfen Sie die Web View-Version, indem Sie die Zeichenfolge User-Agent
lesen. Lesen Sie die navigator.userAgent
-Eigenschaft der Web View mit JavaScript-Interop, und speichern Sie optional den Wert mithilfe eines Singleton-Diensts zwischen, wenn die Benutzer-Agent-Zeichenfolge außerhalb eines Razor-Komponentenkontexts erforderlich ist.
Bei Verwendung des Android-Emulators:
- Verwenden Sie ein emuliertes Gerät, auf dem Google Play Services vorinstalliert ist. Emulierte Geräte, auf denen die Google Play Dienste nicht vorinstalliert sind, werden nicht unterstützt.
- Installieren Sie Google Chrome aus dem Google Play Store. Wenn Google Chrome bereits installiert ist, aktualisieren Sie Chrome aus dem Google Play Store. Wenn auf einem emulierten Gerät nicht die neueste Version von Chrome installiert ist, ist möglicherweise nicht die neueste Version von Android Web View installiert.
iOS/Mac Catalyst
iOS und Mac Catalyst verwenden beide WKWebView
, ein Safari-basiertes Steuerelement, das vom Betriebssystem aktualisiert wird. Wie bei Android bestimmen Sie die Web View-Version, indem Sie die Zeichenfolge User-Agent
der Web View lesen.
Windows (.NET MAUI, WPF, Windows Forms)
Unter Windows ist die Chromium-basierte Microsoft Edge-WebView2
erforderlich, um Blazor-Web-Apps auszuführen.
Die neueste installierte Version von WebView2
, bekannt als Evergreen distribution, wird verwendet. Wenn Sie eine bestimmte Version von WebView2
mit der App versenden möchten, verwenden Sie Fixed Version distribution.
Weitere Informationen zum Überprüfen der aktuell installierten WebView2
-Version und der Verteilungsmodi finden Sie in der Dokumentation zur WebView2
-Verteilung.