Inhoudsopgave:
Definitie - Wat betekent SQL-injectie?
Een SQL-injectie is een computeraanval waarbij kwaadaardige code wordt ingebed in een slecht ontworpen applicatie en vervolgens wordt doorgegeven aan de backend-database. De kwaadwillende gegevens produceren vervolgens databasequeryresultaten of acties die nooit hadden mogen worden uitgevoerd.
Techopedia verklaart SQL Injection
Laten we een voorbeeld van een SQL-injectie-aanval doornemen:
Een applicatie die de activiteiten van een bank uitvoert, bevat menu's die kunnen worden gebruikt om klantgegevens te zoeken met behulp van gegevenspunten zoals het sofinummer van de klant. Op de achtergrond roept de toepassing een SQL-query op die in de database wordt uitgevoerd door de ingevoerde zoekwaarden als volgt door te geven:
SELECT klantnaam, telefoon, adres, geboortedatum WHERE social_sec_no = 23425
In dit voorbeeldscript voert de gebruiker de waarde 23425 in het toepassingsmenu in en vraagt de gebruiker om het sofinummer in te voeren. Vervolgens wordt met behulp van de door de gebruiker opgegeven waarde een SQL-query in de database uitgevoerd.
Een gebruiker met SQL-kennis kan de toepassing begrijpen en, in plaats van een enkele waarde in te voeren wanneer hij om het sofinummer wordt gevraagd, de tekenreeks "23425 of 1 = 1" invoeren die als volgt aan de database wordt doorgegeven:
SELECT klantnaam, telefoon, adres, geboortedatum WHERE social_sec_no = 23425 of 1 = 1
De WHERE-clausule is belangrijk omdat deze kwetsbaarheid introduceert. In een database is de voorwaarde 1 = 1 altijd waar en omdat de query is opgegeven om de gegevens van het sofinummer van de client (23425) of WHERE 1 = 1 te retourneren, retourneert de query alle rijen in de tabel, wat niet de oorspronkelijke bedoeling.
Het bovenstaande voorbeeld van een SQL-injectieaanval is eenvoudig, maar het laat zien hoe een kwetsbaarheid kan worden misbruikt om de toepassing ertoe te bewegen een backend-databasequery of -opdracht uit te voeren.
SQL-injectieaanvallen kunnen worden beperkt door te zorgen voor een goed applicatieontwerp, vooral in modules die gebruikersinvoer vereisen om databasequery's of -opdrachten uit te voeren. In het bovenstaande voorbeeld kan de toepassing worden gewijzigd zodat deze slechts één numerieke waarde accepteert.