Dela via


ASP.NET Core Blazor Hybrid säkerhetsöverväganden

Notera

Det här är inte den senaste versionen av den här artikeln. Den aktuella versionen finns i .NET 9-versionen av denna artikel.

Varning

Den här versionen av ASP.NET Core stöds inte längre. Mer information finns i .NET och .NET Core Support Policy. Den aktuella versionen finns i den .NET 9-versionen av den här artikeln.

Viktig

Den här informationen gäller en förhandsversionsprodukt som kan ändras avsevärt innan den släpps kommersiellt. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, med avseende på den information som tillhandahålls här.

Den aktuella versionen finns i version .NET 9 av den här artikeln.

I den här artikeln beskrivs säkerhetsöverväganden för Blazor Hybrid appar.

Blazor Hybrid appar som renderar webbinnehåll kör .NET-kod i en plattform Web View. .NET-koden interagerar med webbinnehållet via en interopkanal mellan .NET-koden och Web View.

WebView- och .NET-koden samverkar i appen för att återge webbinnehåll.

Webbinnehållet som återges i Web View kan komma från tillgångar som tillhandahålls av appen från någon av följande platser:

  • Mappen wwwroot i appen.
  • En källa som är extern för appen. Till exempel en nätverkskälla, till exempel Internet.

Det finns en förtroendegräns mellan .NET-koden och koden som körs i Web View. .NET-kod tillhandahålls av appen och alla betrodda tredjepartspaket som du har installerat. När appen har skapats kan .NET-koden Web View innehållskällor inte ändras.

Till skillnad från .NET-kodkällorna för innehåll kan innehållskällor från koden som körs i Web View komma inte bara från appen utan även från externa källor. Statiska tillgångar från ett externt CONTENT Delivery Network (CDN) kan till exempel användas eller återges av en apps Web View.

Tänk på koden i Web View som icke betrodd, precis som koden som körs i webbläsaren för en webbapp inte är att lita på. Samma hot och allmänna säkerhetsrekommendationer gäller för ej betrodda resurser i Blazor Hybrid appar som för andra typer av appar.

Undvik om möjligt att läsa in innehåll från ett ursprung från tredje part. För att minska risken kanske du kan hantera innehåll direkt från appen genom att ladda ned de externa tillgångarna, kontrollera att de är säkra att betjäna användare och placera dem i appens wwwroot mapp för paketering med resten av appen. När det externa innehållet laddas ned för inkludering i appen rekommenderar vi att du söker efter virus och skadlig kod innan du placerar det i appens wwwroot mapp.

Om appen måste referera till innehåll från ett externt ursprung rekommenderar vi att du använder vanliga webbsäkerhetsmetoder för att ge appen möjlighet att blockera att innehållet läses in om innehållet komprometteras:

Även om alla resurser är packade i appen och inte läses in från något externt ursprung bör du vara försiktig med problem i resurskoden som körs i Web Vieweftersom resurserna kan ha sårbarheter som kan göra det möjligt att XSS-attacker (cross-site scripting).

I allmänhet skyddar Blazor ramverket mot XSS genom att hantera HTML på säkra sätt. Vissa programmeringsmönster gör det dock möjligt för Razor komponenter att mata in rå HTML i renderade utdata, till exempel rendering av innehåll från en ej betrodd källa. Du bör till exempel undvika att återge HTML-innehåll direkt från en databas. Dessutom kan JavaScript-bibliotek som används av appen manipulera HTML på osäkra sätt för att oavsiktligt eller avsiktligt återge osäkra utdata.

Därför är det bäst att tillämpa samma skydd mot XSS som normalt tillämpas på webbappar. Förhindra inläsning av skript från okända källor och implementera inte potentiellt osäkra JavaScript-funktioner, till exempel eval och andra osäkra JavaScript-primitiver. Vi rekommenderar att du upprättar en csp för att minska dessa säkerhetsrisker.

Om koden i Web View komprometteras får koden åtkomst till allt innehåll i Web View och kan interagera med värden via interopkanalen. Därför måste allt innehåll som kommer från Web View (händelser, JS interop) behandlas som ej betrodda och verifieras på samma sätt som för andra känsliga kontexter, till exempel i en komprometterad Blazor Server app som kan leda till skadliga attacker på värdsystemet.

Lagra inte känslig information, till exempel autentiseringsuppgifter, säkerhetstoken eller känsliga användardata, i kontexten för Web View, eftersom den gör informationen tillgänglig för en cyberattacker om Web View komprometteras. Det finns säkrare alternativ, till exempel hantering av känslig information direkt i den interna delen av appen.

Externt innehåll återges i en iframe

När du använder en iframe för att visa externt innehåll på en Blazor Hybrid sida rekommenderar vi att användarna använder sandbox-funktioner för att säkerställa att innehållet är isolerat från den överordnade sidan som innehåller appen. I följande Razor komponentexempel finns attributet sandbox för taggen <iframe> för att tillämpa sandbox-funktioner på sidan admin.html:

<iframe sandbox src="https://contoso.com/admin.html" />

Varning

Attributet sandbox stöds inte i tidiga webbläsarversioner. Mer information finns i Kan jag använda: sandbox.

Länkar till URL:er utanför appen öppnas i en lämplig extern app, som inte läses in i Web View. Vi rekommenderar inte att du åsidosätter standardbeteendet.

Håll Web View aktuella i distribuerade appar

Kontrollen BlazorWebView använder den för närvarande installerade, plattformsspecifika interna Web View. Eftersom den inbyggda Web View uppdateras regelbundet med stöd för nya API:er och korrigeringar för säkerhetsproblem kan det vara nödvändigt att se till att en app använder en Web View version som uppfyller appens krav.

Använd någon av följande metoder för att hålla Web View aktuellt i utplacerade appar:

  • På alla plattformar: Kontrollera Web View-versionen och uppmana användaren att vidta nödvändiga åtgärder för att uppdatera den.
  • Endast på Windows: Paketera en fast version Web View inom appen, och använda den istället för systemets delade Web View.

Android

Android-Web View distribueras och uppdateras via Google Play Store. Kontrollera Web View-versionen genom att läsa User-Agent strängen. Läs Web View:s navigator.userAgent-egenskap med hjälp av JavaScript-interop och cachelagra värdet med en singleton-tjänst om användaragentsträngen behövs utanför en Razor-komponentkontext.

När du använder Android-emulatorn:

  • Använd en emulerad enhet med Google Play Services- förinstallerad. Emulerade enheter utan förinstallerade Google Play Services stöds inte.
  • Installera Google Chrome från Google Play Store. Om Google Chrome redan är installerat, uppdatera Chrome från Google Play Store. Om en emulerad enhet inte har den senaste versionen av Chrome installerad kanske den inte har den senaste versionen av Android-Web View installerad.

iOS/Mac Catalyst

iOS och Mac Catalyst använder båda WKWebView, en Safari-baserad kontroll som uppdateras av operativsystemet. På samma sätt som i Android--fallet bestämmer du Web View-versionen genom att läsa Web View:s User-Agent-sträng.

Windows (.NET MAUI, WPF, Windows Forms)

På Windows krävs den Chromium-baserade Microsoft Edge WebView2 för att köra Blazor webbappar.

Den senaste installerade versionen av WebView2, som kallas Evergreen distribution, används. Om du vill skicka en specifik version av WebView2 med appen använder du Fixed Version distribution.

Mer information om hur du kontrollerar den för närvarande installerade WebView2 versionen och distributionslägena finns i WebView2 distributionsdokumentationen.

Ytterligare resurser