Hva er SQL-injeksjon (SQLi)?
SQL-injeksjon (SQLi) er en type angrep der angripere legger inn ondsinnede SQL-setninger i et inndatafelt for å manipulere databasen.
Dette angrepet retter seg mot applikasjoner som ikke håndterer validering og brukerinput riktig, og tillater uautorisert tilgang til sensitiv data som passord eller kredittkortdetaljer, etc.
Hvordan SQL-injeksjon fungerer
Når en applikasjon direkte inkluderer brukerinput i en databaseforespørsel uten riktig validering, kan angripere endre forespørselens oppførsel for å legge inn en ondsinnet SQL-setning.
For eksempel:
SELECT * FROM users WHERE username = 'admin' AND password = '12345';
En angriper kunne legge inn:
' OR '1'='1
Som resulterer i:
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '';
Dette returnerer alltid sant, og gir uautorisert tilgang.
Hvorfor SQL-injeksjon er viktig i cybersikkerhet
SQL-injeksjon er den farligste og eldste teknikken i cybersikkerhet. Denne typen angrep er konsekvent oppført i OWASP Topp 10.
Selv små sårbarheter tillater en angriper å:
- Tilgang, endre eller slette data
- Omgå autentisering
- Utføre administrative operasjoner på databasen.
- Kompromittere hele systemet.
Vanlige typer SQL-injeksjon
- Klassisk SQLi: Direkte injeksjon via webskjemaer eller URL-parametere.
- Blind SQLi: Angripere utleder databaseinformasjon indirekte (f.eks. via feilmeldinger eller responstid).
- Union-basert SQLi: Bruker UNION-operatøren for å kombinere resultater fra flere spørringer.
- Feilbasert SQLi: Stoler på databasefeilmeldinger for å hente ut informasjon.
- Tidsbasert blind SQLi: Utnytter serverens responstider for å gjette spørringsresultater.
Hvordan forhindre SQL-injeksjon
1. Bruk parameteriserte spørringer (forberedte utsagn)
Sørg for at SQL-kommandoer behandler brukerinput som data, ikke kjørbar kode.
cursor.execute("SELECT * FROM users WHERE username = ?", (username,))
2. Validering og sanitering av input
Valider all input fra brukere, og tillat kun forventede tegn.
3. Bruk ORM-rammeverk
Rammeverk som Prisma, Hibernate, etc., reduserer direkte SQL-håndtering.
4. Prinsippet om minst privilegium
Begrens brukerrettigheter, gi kun nødvendige tillatelser.
5. Regelmessig sikkerhetstesting
Bruk verktøy for applikasjonssikkerhetstesting som SAST, DAST eller IAST for å oppdage injeksjonsfeil tidlig.
Eksempel i den virkelige verden
Et nettsted for en nettbutikk ble utsatt for et brudd der angripere brukte en SQL-injeksjon i et innloggingsskjema for å hente ut kredittkortdetaljer fra databasen.
Relaterte termer
- XSS (Cross-Site Scripting)
- DAST (Dynamic Application Security Testing)
- OWASP Topp 10
- Applikasjonssikkerhetstesting