SQL Injection

SQL-injectie, SQLi, SQL injection attack, SQL-injectieaanval, database injection, database-injectie, SQL code injection, gestructureerde query taal injectie
SQL Injection is een veelvoorkomende beveiligingsaanval waarbij kwaadaardige SQL-code wordt ingevoegd in invoervelden om ongeautoriseerde toegang tot databases te verkrijgen of data te manipuleren.

Wat is SQL Injection?

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

Toepassingen

Preventie en Bescherming

Het voorkomen van SQL Injection is essentieel voor elke webapplicatie die met databases werkt. Er zijn verschillende bewezen methoden om je applicatie te beschermen:

Prepared Statements en Parameterized Queries

Dit is de meest effectieve verdediging tegen SQL Injection. Prepared statements scheiden SQL-code van data, waardoor gebruikersinput nooit als uitvoerbare code wordt geïnterpreteerd. In plaats van strings samen te voegen, gebruik je placeholders voor variabelen die de database veilig verwerkt.

Input Validatie en Sanitization

Valideer alle gebruikersinput streng voordat deze wordt verwerkt. Controleer op:

  • Verwachte datatypen (getallen, tekst, datums)
  • Toegestane karakters en lengtes
  • Whitelisting van acceptabele waarden
  • Escaping van speciale karakters

Least Privilege Principe

Geef database-accounts alleen de minimaal benodigde rechten. Een webapplicatie hoeft bijvoorbeeld geen DROP TABLE rechten te hebben. Gebruik verschillende accounts voor verschillende functionaliteiten.

Web Application Firewall (WAF)

Een WAF kan verdachte SQL-patronen in HTTP-requests detecteren en blokkeren voordat ze de applicatie bereiken. Dit biedt een extra beschermingslaag, maar mag nooit de enige verdediging zijn.

Testing en Detectie

Regelmatig testen op SQL Injection-kwetsbaarheden is cruciaal:

  • Penetratietesten: Laat beveiligingsexperts je applicatie testen op kwetsbaarheden
  • Automated scanning: Gebruik tools zoals OWASP ZAP, SQLMap of Burp Suite voor geautomatiseerde scans
  • Code reviews: Laat code handmatig reviewen op onveilige database-interacties
  • Security monitoring: Monitor logs voor verdachte database-activiteiten en mislukte injectie-pogingen

Best Practices voor Ontwikkelaars

Voor veilige webontwikkeling zijn deze richtlijnen essentieel:

  • Gebruik altijd prepared statements of ORM-frameworks die dit automatisch doen
  • Vertrouw nooit op client-side validatie alleen
  • Implementeer error handling die geen database-structuur informatie lekt
  • Houd frameworks en database-software up-to-date
  • Gebruik stored procedures waar mogelijk
  • Implementeer logging en monitoring van database-queries
  • Train ontwikkelaars regelmatig over beveiligingsprincipes
  • Voer security audits uit bij elke release

Compliance en Regelgeving

SQL Injection-preventie is vaak een vereiste onder verschillende compliance-standaarden:

  • PCI DSS: Vereist bescherming tegen injectie-aanvallen voor betalingssystemen
  • AVG/GDPR: Verplicht adequate technische beveiligingsmaatregelen voor persoonlijke data
  • ISO 27001: Bevat richtlijnen voor applicatiebeveiliging
  • OWASP Top 10: SQL Injection staat consistent in de top van meest kritieke beveiligingsrisico's

Veelgestelde vragen

Er zijn verschillende manieren om te controleren of je website kwetsbaar is voor SQL Injection. De meest betrouwbare methode is het uitvoeren van een professionele beveiligingsaudit of penetratietest. Je kunt ook geautomatiseerde security scanners gebruiken zoals OWASP ZAP of SQLMap om je applicatie te testen.

Waarschuwingssignalen zijn: error messages die database-informatie tonen, formulieren die niet valideren op speciale karakters, of oude code die string concatenatie gebruikt voor database queries. Als je niet zeker bent, is het verstandig om een beveiligingsexpert te raadplegen, vooral als je gevoelige data verwerkt.

Prepared statements (ook wel parameterized queries genoemd) zijn de meest effectieve verdediging tegen SQL Injection en bieden bij correct gebruik vrijwel volledige bescherming. Ze scheiden SQL-code van data, waardoor gebruikersinput nooit als uitvoerbare code wordt geïnterpreteerd.

Echter, er zijn enkele uitzonderingen waar extra voorzichtigheid nodig is: table names en column names kunnen niet worden geparameteriseerd, ORDER BY clauses vereisen extra validatie, en dynamisch gegenereerde queries kunnen nog steeds risico's bevatten. Daarom is het belangrijk om prepared statements te combineren met input validatie, het least privilege principe voor database-accounts, en regelmatige security audits voor een complete beveiligingsstrategie.

Bij een vermoedelijke SQL Injection-aanval is snelle actie cruciaal. Neem direct de volgende stappen:

  • Isoleer het probleem: Overweeg de getroffen systemen tijdelijk offline te halen of de database-toegang te beperken
  • Analyseer de schade: Controleer database logs om te zien welke data is bekeken, gewijzigd of gestolen
  • Verander credentials: Reset alle database-wachtwoorden en API-keys onmiddellijk
  • Patch de kwetsbaarheid: Identificeer en repareer de code die de injectie mogelijk maakte
  • Informeer betrokkenen: Bij datalekken ben je mogelijk wettelijk verplicht gebruikers en autoriteiten te informeren (AVG/GDPR)
  • Herstel backups: Restore schone backups als data is gecompromitteerd
  • Voer forensisch onderzoek uit: Documenteer het incident voor juridische doeleinden en toekomstige preventie

Schakel bij twijfel altijd een beveiligingsexpert in om de situatie professioneel af te handelen.

Auteur & updates

Auteur: Wouter
Publicatiedatum: 16-02-2026
Laatste update: 16-02-2026