Har hærdet applikationen med nonce‑baseret CSP
Har hærdet applikationen med nonce‑baseret CSP, HSTS, SameSite‑cookies, least‑privilege‑databaseroller og fornyet kontrol af rettigheder på serveren.
Arbejdet udført: 2025

Foto: ChiemSeherin / Pixabay 
Foto: zauber2011 / Pixabay
forsvar, der holder, når browseren er fjendtlig
Situation. Platformen rummer professionelle og organisatoriske data, den slags, folk forventer bliver håndteret ordentligt, så en enkelt forsvarslinje ville aldrig være nok. Arbejdsantagelsen må være, at klienten er fjendtlig — at alt, hvad browseren håndhæver, kan slås fra af den, der sidder ved browseren — og sikkerheden skal holde alligevel.
Opgave. Platformen skulle hærdes i hvert eneste lag — frontend, API, database — så sikkerheden blev håndhævet af serveren, uafhængigt af hvad brugerfladen nu tilfældigvis tillod.
Handling. I frontenden sætter Next.js’ middleware — proxy.ts — en Content‑Security‑Policy med en ny nonce for hver request og strict‑dynamic, plus HSTS og SameSite‑cookies, så browseren er stramt begrænset i, hvad den vil køre og sende. I API’et er der rate limiting, CORS, grænser for request‑størrelse, inputvalidering, før noget når databasen, og logning af de sikkerhedsrelevante hændelser. I databasen logger API’et ind som en least‑privilege‑rolle, der kun kan EXECUTE app‑funktionerne, funktionerne kører som SECURITY DEFINER, og alt er parametriseret. Og rettighederne — tier, rolle, organisation, afgrænsning til skibe — kontrolleres igen på serveren ved hver request, mens kontrollerne i frontenden kun betragtes som UX. De afgør, hvad man ser; serveren afgør, hvad man må.
Resultat. Sikkerheden afhænger ikke af, at brugerfladen opfører sig pænt. Beskyttelserne ligger i lag, så den, der kommer forbi ét, ikke dermed er forbi resten, og det hele er bygget på den antagelse, at man ikke kan stole på klienten — hvilket er den rigtige antagelse for data, folk overlader i fortrolighed.
Læs videre: Har bygget fail‑closed rate limiting mod misbrug. Eller tag et kig på hele porteføljen.
Ét stykke af en længere fortegnelse — og det hele ligger her på sitet.
Hver post er skrevet på samme måde: situationen, opgaven, hvad vi gjorde, og hvad der ændrede sig.

