SQL injection (SQLi) er en angrebsklasse, hvor utroværdigt input — et formularfelt, en URL-parameter eller en HTTP-header — sammensættes i en SQL-sætning, så angriberen kan ændre forespørgslens struktur. Vellykket udnyttelse kan læse vilkårlige tabeller, modificere eller slette data, eskalere rettigheder eller i visse konfigurationer eksekvere operativsystemkommandoer. Det har figureret i OWASP Top Ten i over to årtier.
Hvorfor det er vigtigt
En enkelt SQLi-fejl kan lække en hel brugerdatabase, inklusive hashede adgangskoder, session tokens og persondata underlagt GDPR. Oprydningsomkostninger omfatter tvungne password-resets, breach-meddelelser, bøder fra tilsynsmyndigheder og varig skade på tilliden. I modsætning til mange sårbarheder kan SQLi forebygges fuldstændigt med disciplinerede kodepraksisser — forholdet mellem konsekvens og indsats for at fikse det er enormt.
Sådan fikser du det
- Brug parameterised queries eller prepared statements i hvert eneste databasekald; byg aldrig SQL via string-sammensætning.
- Foretræk en gennemprøvet ORM eller query builder, så applikationskode aldrig ser rå SQL-fragmenter blandet med brugerinput.
- Anvend least privilege: applikationens databasebruger bør ikke kunne droppe tabeller eller læse urelaterede skemaer.
- Validér og normalisér input ved grænsen, men betragt validering som defence in depth, ikke den primære kontrol.
- Lag bredere webforsvar — streng CSP, anti-CSRF-tokens og HSTS — så en enkelt inputfejl ikke kaskaderer.
- Kør automatiserede SAST- og DAST-scanninger i CI, og gennemgå query-logs for usædvanlige mønstre.