SQL Injection (SQLi) is een van de meest voorkomende en gevaarlijke beveiligingslekken in webapplicaties. Het is een aanvalstechniek waarbij een aanvaller kwaadaardige SQL-code invoegt in invoervelden van een webapplicatie, zoals formulieren, zoekbalken of URL-parameters. Door deze techniek kan een aanvaller de database van een website manipuleren, ongeautoriseerde toegang verkrijgen tot gevoelige gegevens, of zelfs volledige controle over de database overnemen.
Deze aanvalsmethode maakt misbruik van zwakke of ontbrekende validatie van gebruikersinvoer. Wanneer een webapplicatie gebruikersinput direct in SQL-queries verwerkt zonder deze te controleren of te ontsmetten, kan een aanvaller speciale karakters en SQL-commando's injecteren die de oorspronkelijke query veranderen. Hierdoor kan de database opdrachten uitvoeren die nooit bedoeld waren door de ontwikkelaars.
Hoe werkt SQL Injection?
Een typisch voorbeeld: een inlogformulier vraagt om een gebruikersnaam en wachtwoord. De webapplicatie bouwt een SQL-query zoals: SELECT * FROM users WHERE username = '[gebruikersinput]' AND password = '[wachtwoord]'. Een aanvaller kan in het gebruikersnaamveld iets invoeren zoals admin' OR '1'='1, waardoor de query wordt: SELECT * FROM users WHERE username = 'admin' OR '1'='1' AND password = ''. Omdat '1'='1' altijd waar is, geeft de database alle gebruikers terug en kan de aanvaller inloggen zonder geldig wachtwoord.
Soorten SQL Injection
Er zijn verschillende varianten van SQL Injection-aanvallen:
- In-band SQLi: De meest voorkomende vorm waarbij de aanvaller dezelfde communicatiekanaal gebruikt om de aanval uit te voeren en resultaten te ontvangen
- Blind SQLi: De aanvaller ziet geen directe resultaten maar kan wel afleiden of queries succesvol zijn door het gedrag van de applicatie te observeren
- Out-of-band SQLi: De aanvaller gebruikt alternatieve kanalen (zoals DNS of HTTP requests) om data te extraheren wanneer directe respons niet mogelijk is
- Time-based SQLi: De aanvaller gebruikt tijdsvertragingen in queries om informatie af te leiden over de database
Impact van SQL Injection
De gevolgen van een succesvolle SQL Injection-aanval kunnen verwoestend zijn:
- Ongeautoriseerde toegang tot gevoelige klantgegevens, wachtwoorden en persoonlijke informatie
- Wijzigen of verwijderen van data in de database
- Omzeilen van authenticatiemechanismen
- Uitvoeren van administratieve operaties op de database
- In sommige gevallen zelfs toegang tot het onderliggende besturingssysteem
- Reputatieschade en verlies van klantvertrouwen
- Juridische en financiële consequenties door datalekken
