SQL injectie
Wat is SQL-injectie?
SQL injectie is een aanvalstechniek waarbij een hacker via een invoerveld of URL zelf databasecode meestuurt. Een website die die invoer niet goed controleert, voert die code uit alsof het onderdeel van het programma is. Zo kan een aanvaller gegevens lezen, wijzigen of verwijderen.
Het is een bekende aanval op webapplicaties en nog steeds relevant, vooral bij zelfgemaakte of verouderde software.
Hoe werkt het in de praktijk?
Stel dat een zoekveld de invoer rechtstreeks in een databasevraag plaatst. Een gewoon zoekwoord levert dan gewone resultaten op. Een aanvaller stuurt in plaats daarvan invoer die de vraag verandert, zodat die bijvoorbeeld gebruikersgegevens teruggeeft. Hetzelfde kan via een URL-parameter of een inlogformulier.
Wat een aanvaller ermee kan, hangt af van de rechten van de databasegebruiker. Dat maakt rechten belangrijk, ook als de code zelf nog niet is aangepast.
Hoe voorkom je SQL-injectie?
Het is goed te voorkomen. De belangrijkste maatregelen zijn:
- Gebruik voorbereide queries (prepared statements) in plaats van invoer rechtstreeks in een SQL-opdracht te plakken.
- Valideer en beperk invoer, bijvoorbeeld op type en lengte.
- Geef databasegebruikers alleen de rechten die ze echt nodig hebben.
- Houd software en plugins actueel, want veel SQL-injecties zitten in verouderde code.
Een web application firewall kan extra aanvallen tegenhouden, maar vervangt geen veilige programmering. Meer over die laag lees je in het artikel over de web application firewall.
Waarom is dit vooral een probleem bij maatwerk en oude software?
Grote, veelgebruikte software wordt vaak snel gecontroleerd en bijgewerkt. Maatwerk en oude plugins worden minder vaak getest en soms lang niet aangepast. Daardoor kan een lek langer blijven bestaan.
Gebruik je maatwerkcode of een plugin die al lang niet meer is bijgewerkt? Laat die dan nakijken of vervangen. Zie ook waarom updates en patches belangrijk zijn.
Veelgestelde vragen
Wat is het verschil tussen SQL-injectie en XSS?
Bij SQL-injectie richt de aanval zich op de database, bij XSS op de browser van bezoekers. Beide ontstaan doordat invoer niet goed wordt verwerkt, maar het effect en de verdediging verschillen. Lees het artikel over cross-site scripting voor de details.
Kan mijn hoster SQL-injectie voor mij voorkomen?
Een hoster beveiligt de server en het netwerk, maar de software op je site is meestal jouw verantwoordelijkheid. Een firewall van je hoster kan sommige aanvallen tegenhouden. Vraag wat er standaard wordt gedaan en houd je CMS, plugins en code zelf actueel.
Hoe weet ik of mijn site kwetsbaar is voor SQL-injectie?
Een zekere manier is een professionele controle van de code of een beveiligingsscan. Let zelf op foutmeldingen die databasedetails tonen, en op software die niet meer wordt bijgewerkt. Een foutmelding met databasedetails is al een reden om de code te laten nakijken.