Je winkelwagen is leeg
Producten die je toevoegt, verschijnen hier.
SQL-injectie is een aanval waarbij iemand via een invoerveld eigen SQL-code meestuurt die de database van een website uitvoert.
SQL-injectie (Engels: SQL injection) is een aanval waarbij iemand via een formulier, zoekveld of URL stukjes SQL meestuurt, die een kwetsbare website als opdracht aan de database doorgeeft. Zo kan een aanvaller gegevens uitlezen, wijzigen of wissen waar hij nooit bij had mogen komen.
Het gaat mis als code de invoer van een bezoeker rechtstreeks in een query plakt. Stel dat een inlogpagina SELECT * FROM users WHERE naam = '$naam' uitvoert. Vult iemand als naam ' OR '1'='1 in, dan is de voorwaarde altijd waar en geeft de database alle gebruikers terug. Met dezelfde truc lees je soms een compleet klantenbestand uit, inclusief wachtwoordhashes.
De echte oplossing heet een prepared statement. De query en de invoer gaan dan apart naar de database, zodat die de invoer altijd als waarde behandelt en nooit als code. In PHP doe je dat met PDO: $stmt = $pdo->prepare('SELECT * FROM users WHERE naam = ?'); en daarna $stmt->execute([$naam]). Injectie is een oud probleem, maar staat in de OWASP Top 10 van 2025 nog steeds op plek 5.
Schrijf je zelf geen code, dan zit het risico vooral in de plugins en extensies van je CMS. Houd die bijgewerkt en verwijder wat je niet gebruikt. Geef elke site ook een eigen database met een eigen gebruiker, die je in DirectAdmin aanmaakt onder Accountbeheer en Databasen, zodat een SQL-injectie in de ene site niet bij de database van de andere kan.
SQL-injectie werd voor het eerst publiek beschreven op 25 december 1998, door Jeff Forristal onder de schuilnaam rain.forest.puppy, in Phrack 54. Hij liet zien hoe je via een webpagina extra opdrachten aan Microsoft SQL Server kon meegeven (Wikipedia).
De aanval kreeg in 2007 een bijnaam dankzij de strip xkcd 327, over een zoon die Robert'); DROP TABLE Students;-- heet: Little Bobby Tables.
Belangrijke mijlpalen: