SQL-injeksjon
Sql-injection er en angrepsmetode mot datasystemer der en sql-setning blir manipulert til å gjøre ting den ikke var ment til å gjøre. Angrepet muliggjøres kun hvis bruker-input blir brukt til å bygge opp sql-setningen. Dersom en angriper vet hvilken type datasystemer som er i samspill kan bruker-input spesialkontrueres til å skape en syntaktisk korrekt sql-setning som gjør noe helt annet. Dette kan være for eksempel å hente ut sensitiv data fra en database, typisk brukernavn, passord og epostadresser.
Eksempel (ikke-teknisk)
Et helt enkelt eksempel på er den typiske innloggingsspørringen:
SELECT * FROM users WHERE username = '$username' AND password = '$password'
Spørringen slår opp i databasen om det fins en bruker med det gitte brukernavn og passord, og vil naturligvis returnere ingen resultater dersom brukernavn og passord ikke stemmer overens.
Dersom en angriper har kontroll over variabelen $username kan denne settes til å være:
' OR 1=1--
Det første tegnet er enkel apostrof og vil bryte ut av den statiske innkapslingen av apostrofer som datasystemet gjør. Det som kommer etter er et uttrykk som alltid vil være sant: 1=1. De to siste tegnene to bindestreker er metategnene for start av kommentar i mange databasesystemer. Resultatet blir at resten av spørringen kommenteres vekk.
Den endelige spørringen vil se slik ut:
SELECT * FROM users WHERE username = '' OR 1=1-- ' AND password = '$password'
Spørringen vil alltid returnere sant og vil hente ut alle brukere. Den første brukeren i databasen er ofte administrator brukeren, og i praksis vil vedkommende som injiserte denne setningen bli logget inn som administrator.
Hvordan forhindre
Gjør hvitvasking av all brukerinput.