SQL-injectie
Een SQL-injectie is een vorm van cyberaanval die gericht is op databankgekoppelde websites en webapps. Bij deze aanvallen wordt misbruik gemaakt van onjuist geconfigureerde serversoftware voor websites en databanken om een server ertoe te verleiden SQL-instructies te verwerken die deze anders niet zou uitvoeren. Deze aanvallen kunnen gevoelige persoonlijke en financiële informatie onthullen, een aanvaller toestaan informatie in een databank te wijzigen of te verwijderen, of andere onbevoegde toegang bieden.
Een website is kwetsbaar voor een SQL-injectie wanneer deze invoer van een gebruiker accepteert uit een tekstueel formulier en die invoer als onderdeel van een SQL-query gebruikt. In plaats van het formulier in te vullen met de verwachte informatie zoals een (gebruikersnaam), voert de aanvaller een tekstuele tekenreeks in die de SQL-query wijzigt. Een hypothetische query kan bijvoorbeeld beginnen met SELECT UserID, Name, Password FROM Users WHERE UserID = , gevolgd door de invoer uit een formulier voor gebruikers-ID. Als de gebruiker zijn of haar gebruikers-ID invoert, werkt de query zoals verwacht en worden de bijbehorende gegevens opgehaald.
Als de server de ingevoerde tekst echter zonder beperkingen in de query plaatst, kan een aanvaller deze gebruiken om de SQL-query zelf te wijzigen. Als iemand in plaats van een gebruikers-ID de tekst 317 OR 1=1 invoert, wordt de query SELECT UserID, Name, Password FROM Users WHERE UserID = 317 OR 1=1;. Omdat OR 1=1 altijd als waar wordt geëvalueerd, overschrijft dit de gebruikers-ID; de query retourneert in plaats daarvan de gebruikers-ID's, namen en wachtwoorden van alle vermeldingen in de tabel Users. Andere soorten code-injectie kunnen een aanvaller toestaan in te loggen als sitebeheerder, records of tabellen uit een databank te verwijderen of (in sommige extreme gevallen) shell-scripts en andere code in te voegen en uit te voeren.
Een websitebeheerder kan SQL-injectieaanvallen voorkomen door de serversoftware up-to-date te houden. Het is ook belangrijk om invoer voor databanken te "saneren" door tekstinvoer te beperken of bepaalde tekens eruit te filteren. Websitebeheerders kunnen hun SQL-query's ook parametriseren — door plaatshouders in de query te gebruiken die naar de gebruikersinvoer verwijzen, in plaats van deze rechtstreeks in de query te plaatsen.
Test je kennis