SQL-injectie is een aanvalstechniek waarbij een aanvaller kwaadaardige databasecommando's in een invoerveld of webadres plaatst, zodat een website die commando's uitvoert op de eigen database. Hierdoor kunnen gegevens zonder toestemming worden gelezen, gewijzigd of verwijderd.
Hoe SQL-injectie ontstaat
Veel websites halen gegevens op met SQL, de taal waarmee een database wordt bevraagd. Gaat het fout, dan bouwt de website zo'n opdracht op door tekst van de bezoeker er rechtstreeks in te plakken. De database kan dan niet meer onderscheiden wat bedoeld was als gegevens en wat als opdracht.
Een illustratief voorbeeld: een inlogformulier controleert een gebruikersnaam en wachtwoord met een databasevraag. Als de website invoer niet veilig verwerkt, kan een aanvaller zo veel tekst invullen dat de vraag zelf verandert en de controle wordt omzeild.
Mogelijke gevolgen
Wat een aanvaller kan doen, hangt af van de rechten die de website in de database heeft. Mogelijke gevolgen zijn:
- het inzien van gegevens die niet voor de bezoeker bedoeld zijn, zoals klantgegevens;
- het aanpassen of verwijderen van gegevens;
- inloggen zonder geldig wachtwoord;
- in ernstige gevallen toegang tot meer onderdelen van de server.
Als er persoonsgegevens worden buitgemaakt, is er sprake van een datalek en gelden de regels van de AVG.
Hoe je het voorkomt
De belangrijkste maatregel is nooit invoer rechtstreeks in een databasevraag te plakken. Gebruik in plaats daarvan prepared statements (voorbereide queries): de vraag en de gegevens worden dan gescheiden doorgegeven, zodat invoer nooit als opdracht wordt gelezen.
Daarnaast helpt het om invoer te controleren en om de databasegebruiker van de website alleen de rechten te geven die nodig zijn. Een goed onderhouden framework biedt deze bescherming meestal standaard, mits het op de juiste manier wordt gebruikt.