SQL Injection (SQLi)
SQL Injection (vaak afgekort tot SQLi) is een manier om een database te manipuleren via invoervelden op een website of app. De term klinkt technisch, maar het principe is verrassend simpel: een aanvaller stopt kwaadaardige SQL-code in een veld waar je normaal iets onschuldigs typt zoals een naam of e-mailadres. Als de achterliggende code niet goed beveiligd is, voert de database die invoer blindelings uit. Met alle gevolgen van dien: toegang tot data, aanpassen van records of zelfs volledige overname van een systeem.
Inhoudsopgave
Wat begint met een naamveld, eindigt bij je database
Wat begint als een simpel tekstveld, kan veranderen in een achterdeur naar je volledige database. Aanvallers proberen via slimme trucjes de logica van je code te omzeilen. Ze stellen als het ware een vraag aan de database in een taal die hij niet zou mogen begrijpen, maar toch uitvoert.
In plaats van een specifieke gebruiker op te vragen, spuugt de database hierdoor alles uit wat hij heeft. Inclusief data waarvan je dacht dat die goed verstopt zat.
Slordige code, dure gevolgen
SQLi staat al jarenlang stevig in de OWASP Top 10: de lijst van meest kritieke beveiligingsfouten in webapplicaties. Dat komt doordat veel websites nog steeds gebruikmaken van dynamische queries zonder voldoende beveiliging.
Zeker bij oudere systemen of snel in elkaar gezette applicaties wordt validatie van gebruikersinvoer vaak vergeten of verkeerd uitgevoerd. En precies daar ligt de zwakke plek.
Hoe voorkom je SQLi?
Het goede nieuws is dat SQL Injection goed te voorkomen is. De sleutel zit in hoe je omgaat met invoer van gebruikers. Door gebruik te maken van veilige methoden (zoals parameterized queries of prepared statements) geef je de database geen kans om invoer als een opdracht te interpreteren.
Daarnaast is het belangrijk om invoer te valideren (klopt het type en het formaat van de invoer?) en geen aannames te doen over wat gebruikers invullen. Want hoe betrouwbaar een formulier er ook uitziet: de echte gevaren zitten onder de motorkap.
Veelgestelde vragen
Toegang krijgen tot vertrouwelijke data, gebruikersaccounts wijzigen, gegevens wissen of systemen overnemen.
Nee, zeker niet. Elke site of app met een invoerveld en een achterliggende database is een mogelijk doelwit.
Valideren is belangrijk, maar niet voldoende. De beste bescherming is het gebruik van veilige database-aanroepen.
Dat kun je testen met speciale tools of laten controleren in een code-audit. Maar een goede codebasis is altijd de eerste stap.