Hoppa till innehållet

Härdade applikationen med nonce‑baserad CSP, HSTS, SameSite‑cookies, databasroller med minsta behörighet och förnyade kontroller av åtkomsträttigheter på serversidan.

försvar som håller när webbläsaren är fientlig

Situation. Plattformen lagrar yrkes- och organisationsdata, den sortens data som folk förväntar sig ska hanteras ordentligt, så en enda försvarslinje skulle aldrig räcka. Arbetsantagandet måste vara att klienten är fientlig — att allt som webbläsaren upprätthåller kan kopplas bort av den som sitter vid webbläsaren — och säkerheten måste hålla ändå.

Uppgift. Plattformen behövde härdas i varje lager — frontend, API, databas — så att säkerheten upprätthölls av servern oberoende av vad gränssnittet råkade tillåta.

Handling. I frontenden sätter middlewaren i Next.js — proxy.ts — en Content‑Security‑Policy med en nonce per anrop och strict‑dynamic, plus HSTS och SameSite‑cookies, så att webbläsaren är låst när det gäller vad den kör och skickar. I API:et finns hastighetsbegränsning, CORS, storleksgränser för anrop, validering av indata innan något når databasen och loggning av säkerhetsrelevanta händelser. I databasen loggar API:et in som en roll med minsta möjliga behörighet som bara får anropa appens funktioner med EXECUTE, funktionerna körs som SECURITY DEFINER och allt är parametriserat. Och rättigheterna — nivå, roll, organisation, avgränsning per fartyg — kontrolleras på nytt på servern vid varje anrop, medan spärrarna i frontenden enbart behandlas som UX. Spärrarna avgör vad du ser; servern avgör vad du får göra.

Resultat. Säkerheten hänger inte på att gränssnittet beter sig. Skydden ligger i lager så att den som tar sig förbi ett av dem inte därmed tar sig förbi resten, och det hela bygger på antagandet att klienten inte går att lita på — vilket är rätt antagande för data som människor lämnar över i förtroende.

En del av en längre historik — och den finns i sin helhet här.

Varje post är skriven på samma sätt: situationen, uppgiften, vad vi gjorde och vad som förändrades.

Se hela historiken