Spring til indhold

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.

  • Castle ruins, fortress, castle wall
    Foto: ChiemSeherin / Pixabay
  • Tokyo, bridge, wadakura moat
    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.

É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.

Se hele fortegnelsen