Blazor och .NET

Säkerhet i Blazor: 12 saker att kontrollera före driftsättning

Tolv säkerhetskontroller för Blazor-affärsapplikationer på .NET 10: behörighet i tjänster, hemligheter, WebAssembly, formulär, fel, CSP och sårbara paket.

Vlado Pandžić

Vlado Pandžić · Grundare · Senior .NET-arkitekt
Publicerad · 5 min läsning

De flesta säkerhetsincidenter i affärsapplikationer är inte sofistikerade. En nyckel i repositoryt, en token som aldrig går ut, en skärm som döljer en knapp men inte handlingen bakom den. Blazor har vettiga standardinställningar, men gör att gränssnittskod och serverkod ser nästan likadana ut, och det är just där de enkla misstagen gömmer sig.

Här är tolv kontroller som är värda att gå igenom innan en Blazor-applikation driftsätts, eller före nästa revision. Vissa gäller överallt, andra bara för ett visst renderingsläge.

Överallt

1. Behörighet hör hemma i tjänsten, inte bara i gränssnittet

AuthorizeView avgör vad användaren ser. Den avgör inte vad användaren får göra.

<AuthorizeView Roles="Finance">
    <button @onclick="() => Payments.ApproveAsync(payment.Id, user)">Approve payment</button>
</AuthorizeView>

Att dölja knappen är bra användarupplevelse, men skyddet måste finnas i metoden som gör jobbet, så att det gäller oavsett vilken skärm, vilket API eller vilken framtida utvecklare som anropar den:

public sealed class PaymentService(IAuthorizationService authorization, PaymentRepository payments)
{
    public async Task ApproveAsync(int paymentId, ClaimsPrincipal user)
    {
        var result = await authorization.AuthorizeAsync(user, "ApprovePayments");
        if (!result.Succeeded)
            throw new UnauthorizedAccessException();

        await payments.ApproveAsync(paymentId);
    }
}

Sidor skyddas med @attribute [Authorize], känsliga handlingar med en policy i tjänsten. Båda, inte det ena eller det andra. Samma regel gäller för en AI-assistent i applikationen.

2. Inga hemligheter i repositoryt

Anslutningssträngar, API-nycklar och certifikat hör hemma i Azure Key Vault eller i hostingmiljöns inställningar, och lokalt i Secret Manager, inte i appsettings.json. Om en nyckel någon gång har checkats in räcker det inte att ta bort den, eftersom den finns kvar i git-historiken. Den måste bytas ut.

3. Tokens och nycklar som går ut

API-nycklar utan utgångsdatum och sessioner som varar i månader är en öppen dörr som ingen minns. Varje nyckel behöver en ägare, ett utgångsdatum och ett sätt att återkallas.

4. Kända sårbarheter i NuGet-paket

Sedan .NET 8 SDK varnar NuGet vid återställning för paket med kända sårbarheter. De varningarna får inte tystas och glömmas. För äldre applikationer visar vårt kostnadsfria verktyg för .NET Framework-migrering vilka av dina paket som har kända sårbarheter.

5. Rå HTML bara från betrodda källor

Blazor kodar allt det visar, så att text som en användare skriver inte kan bli ett skript. Undantaget är MarkupString, som visar HTML som den är. Om den HTML:en kommer från användare, e-post eller externa system måste den saneras först.

6. Detaljerade fel bara under utveckling

DetailedErrors skickar hela felet med detaljer till webbläsaren. På en utvecklares dator är det användbart, i produktion en present till en angripare. I produktion får användaren ett kort meddelande, och detaljerna går till loggen, till exempel till Application Insights.

7. Gränser för inloggning och tunga operationer

Inloggning, lösenordsåterställning och exporter som belastar databasen hårt behöver en gräns för hur många anrop en användare eller adress får skicka. ASP.NET Core har det inbyggt med AddRateLimiter.

8. Säkerhetshuvuden och CSP

En Content Security Policy talar om för webbläsaren vilka skript den får köra. Blazor har egna krav: en WebAssembly-applikation behöver wasm-unsafe-eval i policyn. Sätt policyn medvetet och testa den, i stället för att utelämna den för att ”något slutade fungera”.

Statiska formulär

9. Skydd mot förfalskade anrop (antiforgery)

I en Blazor Web App skyddas formulär som renderas på servern mot cross-site request forgery när applikationen anropar app.UseAntiforgery(). EditForm lägger till token själv, medan ett vanligt HTML-<form> behöver komponenten <AntiforgeryToken />.

Interactive Server

10. Höj inte anslutningsgränserna i blindo

Med Interactive Server håller varje användare en anslutning och minne på servern. Blazor har gränser för meddelandestorlek och för hur mycket som buffras per användare, och att höja dem ”för att en uppladdning misslyckades” öppnar för att servern kan tömmas på resurser. Stora filer hör hemma i en separat uppladdning, inte i ett enda jättemeddelande. Hur minnet per användare summeras beskriver artikeln om långsamma Blazor-applikationer.

WebAssembly

11. Inget hemligt i klienten

Allt en WebAssembly-applikation innehåller laddas ner till webbläsaren: koden, konfigurationen och biblioteken. Microsoft är tydliga med att anslutningssträngar, nycklar, lösenord och privat kod aldrig får finnas där. Behörighetskontroller i webbläsaren kan kringgås, så varje API måste kontrollera behörigheterna på servern igen.

12. Tokens stannar på servern

Åtkomsttokens i webbläsarens lokala lagring är ett lätt mål. Microsofts rekommenderade upplägg för Blazor Web Apps är mönstret Backend for Frontend: servern håller tokens och pratar med API:erna, och webbläsaren får bara en säker cookie.

Checklistan i en tabell

# Kontroll Gäller för
1 Behörighet i tjänster, inte bara i gränssnittet Överallt
2 Inga hemligheter i repositoryt Överallt
3 Nycklar och tokens som går ut Överallt
4 Inga kända sårbarheter i NuGet-paket Överallt
5 MarkupString bara för betrodd HTML Överallt
6 Detaljerade fel avstängda i produktion Överallt
7 Gränser för inloggning och tunga operationer Överallt
8 Medveten CSP och säkerhetshuvuden Överallt
9 Antiforgery för formulär Statiska formulär
10 Anslutningsgränserna ligger kvar Interactive Server
11 Inget hemligt i klienten WebAssembly
12 Tokens på servern (BFF) WebAssembly

Vilket renderingsläge som passar vilken skärm och vad det betyder för säkerheten beskriver vi i Blazor Server vs WebAssembly vs Auto.

Så arbetar vi

Vi granskar Blazor- och .NET-applikationer mot just den här listan och åtgärdar det vi hittar, från behörighet som bara fanns i gränssnittet till nycklar som hamnat i repositoryt. Du får en prioriterad lista över riskerna, från det som bör åtgärdas den här veckan till det som kan vänta. Mer om vårt arbete med Blazor, och första steget är ett kostnadsfritt samtal på 30 minuter.

Källor

Den här artikeln är endast allmän information och inte juridisk, skattemässig, ekonomisk eller annan professionell rådgivning. Scenarier, exempel och beräkningar är illustrativa. Användarvillkor och ansvarsfriskrivning.

Relaterade artiklar

© 2026 ProCoding — Alla rättigheter förbehållna.Företagsinformation och integritetAnvändarvillkorSplit, Kroatien