Wat Is SQL Injectie (SQLi)?
SQL Injectie (SQLi) is een type aanval waarbij aanvallers kwaadaardige SQL-instructies invoeren in een invoerveld om de database te manipuleren.
Deze aanval richt zich op applicaties die er niet in slagen om invoer en validatie correct te verwerken, waardoor ongeautoriseerde toegang tot gevoelige gegevens zoals wachtwoorden of creditcardgegevens mogelijk wordt.
Hoe SQL Injectie Werkt
Wanneer een applicatie gebruikersinvoer direct opneemt in een databasequery zonder de juiste validatie, kunnen aanvallers het gedrag van de query wijzigen om een kwaadaardige SQL-instructie in te voeren.
Bijvoorbeeld:
SELECT * FROM users WHERE username = 'admin' AND password = '12345';
Een aanvaller zou kunnen invoeren:
' OR '1'='1
Wat resulteert in:
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '';
Dit retourneert altijd waar, waardoor ongeautoriseerde toegang wordt verleend.
Waarom SQL Injectie Belangrijk Is in Cybersecurity
SQL Injectie is de gevaarlijkste en oudste techniek in cybersecurity. Dit type aanval staat consequent vermeld in de OWASP Top 10.
Zelfs kleine kwetsbaarheden stellen een aanvaller in staat om:
- Toegang tot, wijzigen of verwijderen van gegevens
- Authenticatie omzeilen
- Uitvoeren van administratieve handelingen op de database.
- Het hele systeem compromitteren.
Veelvoorkomende soorten SQL-injectie
- Klassieke SQLi : Directe injectie via webformulieren of URL-parameters.
- Blinde SQLi : Aanvallers leiden database-informatie indirect af (bijv. via foutmeldingen of responstijd).
- Union-gebaseerde SQLi : Gebruikt de UNION-operator om resultaten van meerdere queries te combineren.
- Fout-gebaseerde SQLi : Vertrouwt op databasefoutmeldingen om informatie te extraheren.
- Tijd-gebaseerde blinde SQLi : Exploiteert serverresponstijden om queryresultaten te raden.
Hoe SQL-injectie te voorkomen
1. Gebruik geparameteriseerde queries (Prepared Statements)
Zorg ervoor dat SQL-opdrachten gebruikersinvoer als gegevens behandelen, niet als uitvoerbare code.
cursor.execute("SELECT * FROM users WHERE username = ?", (username,))
2. Invoer validatie en sanering
Valideer alle invoer van gebruikers, alleen verwachte tekens toestaan.
3. Gebruik ORM-frameworks
Frameworks zoals Prisma, Hibernate, etc., verminderen directe SQL-verwerking.
4. Principe van minste privilege
Beperk gebruikersrechten, geef alleen de rechten die nodig zijn.
5. Regelmatige beveiligingstests
Gebruik applicatiebeveiligingstesttools zoals SAST, DAST of IAST om injectiefouten vroegtijdig te detecteren.
Voorbeeld in de echte wereld
Een website van een online winkel leed onder een inbreuk waarbij aanvallers een SQL-injectie gebruikten in een inlogformulier om creditcardgegevens uit de database te halen.
Gerelateerde termen
- XSS (Cross-Site Scripting)
- DAST (Dynamic Application Security Testing)
- OWASP Top 10
- Applicatiebeveiligingstesten