Website Without PHP
NL
Menu

SQL-injectie

Ook bekend als: SQLi

SQL-injectie is een aanval waarbij iemand via een formulier of webadres eigen opdrachten in de database van je site smokkelt.

Beveiliging Laatst bijgewerkt:

SQL-injectie is een aanval waarbij iemand via een formulier of webadres eigen opdrachten in de database van je site smokkelt. Zo kan hij gegevens lezen of veranderen, zoals gebruikers of bestellingen. De oorzaak zit in de code van de site of een plugin, dus updates en goed geschreven code zijn de verdediging.

Wat is SQL-injectie?

SQL-injectie gebeurt als code een databasevraag opbouwt door tekst uit een formulier, een URL of een cookie er rechtstreeks in te plakken. De database kan het verschil niet zien tussen wat de ontwikkelaar bedoelde en wat de aanvaller toevoegde.

De meeste dynamische sites bewaren inhoud en gebruikers in een database en praten ermee in een taal die SQL heet. Een zoekbalk maakt van het woord van de bezoeker bijvoorbeeld een vraag als “zoek berichten waarvan de titel dit woord bevat”. Plakt de code dat woord er zomaar in, dan kan een bezoeker iets intypen dat de vraag voortijdig afsluit en er een eigen opdracht aan toevoegt.

De oplossing in code is bekend: houd de opdracht en de gegevens gescheiden. Bij prepared statements krijgt de database eerst de opdracht en daarna apart de invoer van de bezoeker, zodat invoer nooit als opdracht wordt behandeld. Fouten ontstaan waar dat niet is gedaan, vaak in oudere of maatwerkcode.

Waar het voorkomt

Zoekformulieren, loginformulieren, filters, sorteeropties, reactieformulieren en elke URL-parameter die in een databasevraag belandt, zijn de gebruikelijke plekken. Het is geen speciale truc tegen één product. Het is een fout die elke ontwikkelaar kan maken, en daarom blijft het opduiken in lijsten met kwetsbaarhedenEen kwetsbaarheid is een zwakke plek in software waar een aanvaller misbruik van kan maken, zoals een deur die niet goed op slot gaat..

Wat het betekent voor een PHP- of WordPress-site

WordPress-core gaat zorgvuldig om met databasetoegang. Het risico zit vooral in plugins en themaEen WordPress-thema is het ontwerp van je WordPress-site: het bepaalt hoe pagina's eruitzien en hoe ze zijn opgebouwd.’s, zeker als ze niet meer worden onderhouden, uit een onbekende bron komen of voor één klant zijn geschreven en nooit zijn nagekeken. Een WordPress-pluginEen WordPress-plugin is een uitbreiding die je aan je WordPress-site toevoegt voor een extra functie, zoals een formulier of een webshop. met een bekende SQL-injectiefout is een gewone reden voor een beveiligingsupdateEen securitypatch is een update die alleen een beveiligingsprobleem oplost en verder niets aan je website verandert..

De gevolgen hangen af van wat de database bevat. Een visitekaartjessite met een paar pagina’s legt weinig bloot. Een webshop met klantgegevens of een ledensite met logins heeft meer te verliezen, en dan komen er bij een inbreuk ook meldplichten bij. Dit is algemeen advies, en we maken er geen schrikbeelden met getallen van.

Een concreet voorbeeld

Denk aan een plugin die een lijst filtert op een categorie uit het webadres. De code haalt de categorie uit het adres en zet hem in een databasevraag. Een bezoeker past het adres aan zodat de categorie extra databaseopdrachten bevat. Scheidt de plugin invoer en opdrachten niet, dan voert de database die opdrachten ook uit. De oplossing van de maker past de plugin aan zodat hij prepared statements gebruikt, en jouw oplossing is die update installeren. Verwante aanvallen, zoals cross-site scriptingCross-site scripting (XSS) is een aanval waarbij iemand een schadelijk script op jouw pagina zet dat meedraait in de browser van je bezoekers., richten zich op de browser van bezoekers en niet op de database.

Wanneer je handelt

Update plugins en thema’s als de changelog van de maker SQL-injectie of “databasevraag” noemt, en verwijder plugins die je niet meer gebruikt. Houd databasewachtwoorden buiten bereik en geef het databaseaccount van de site alleen de rechten die het nodig heeft. Is een plugin verlaten, vervang hem dan.

Hoe minder code er bij het bekijken van een pagina een databasevraag doet, hoe kleiner het aanvalsoppervlakHet aanvalsoppervlak is het geheel van plekken waar een aanvaller kan proberen je website binnen te komen, zoals logins, formulieren en plugins.. Een statische websiteEen statische website bestaat uit kant-en-klare pagina's die de server alleen hoeft af te geven, zonder dat er bij elk bezoek iets wordt berekend. heeft op dat moment geen database, wat deze klasse aanvallen voor de pagina’s zelf wegneemt. Vermoed je misbruik, of toont de site rare inhoud of onbekende gebruikers, of staat je website offline, vraag dan om onze hulp. Wil je van dit soort blootstelling af, kijk dan naar ons werk aan een website zonder PHP.

Veelgestelde vragen

Wat kan een aanvaller met SQL-injectie?

Afhankelijk van de fout kan hij gegevens lezen die hij niet mag zien, records wijzigen of verwijderen, of in sommige opstellingen verdere controle krijgen. Het resultaat hangt af van hoe de database is ingericht en wat de foute code mag doen.

Kan een firewall of beveiligingsplugin SQL-injectie tegenhouden?

Veel gangbare pogingen kan hij blokkeren, en dat helpt. De echte oplossing is code die invoer en opdrachten niet vermengt, en die komt uit een update van de maker. Zie een firewall als extra laag en niet als reparatie.

Komt SQL-injectie nog vaak voor?

Het is een bekend type waarvan ontwikkelaars al lang weten hoe je het voorkomt, maar het duikt nog steeds op in maatwerkcode en in plugins die oud zijn of slecht worden onderhouden.

Heeft een statische website SQL-injectie?

Een statische site doet bij het bekijken van een pagina geen databasevraag, dus de aanval heeft daar niets om op te werken. Formulieren, reacties of andere functies die je via diensten van derden toevoegt, hebben hun eigen risico's.

Verwante pagina's

  1. Domein
  2. Controle
  3. Uitkomst
  4. Rapport

Welke PHP-versie draait jouw site?

Vul je domein in. We lezen alleen wat je site openbaar meestuurt: de headers en de kop van de homepage. Geen scan, geen login. We bewaren het domein en de uitkomst, nooit je IP-adres.