SQL-injecties zijn een vorm van cyberaanval waarbij een aanvaller probeert om ongeautoriseerde queries te sturen naar een database via een webapplicatie. Dit gebeurt vaak door het invoeren van specifieke tekens of codes in een invoerveld op een website, zoals een zoekveld of een formulier. Deze code kan de database op een manier laten functioneren die niet de bedoeling was, zoals het ophalen van vertrouwelijke informatie of het maken van wijzigingen aan de database.
Een SQL-injectie kan er in de praktijk bijvoorbeeld zo uit zien:
als een gebruiker een zoekterm invoert in een zoekveld op een website, kan de aanvaller in plaats van een normale zoekterm speciale SQL-code invoeren die ervoor zorgt dat de database op een ongewenste manier functioneert. Dit kan bijvoorbeeld leiden tot het ophalen van vertrouwelijke informatie uit de database, zoals wachtwoorden of creditcardgegevens.
Er zijn verschillende manieren om SQL-injecties te herkennen. Zo kan bijvoorbeeld een foutmelding in de browser verschijnen als gevolg van een mislukte SQL-injectie. Ook kan het zijn dat bepaalde pagina’s op de website niet meer goed functioneren of dat er onverwachte wijzigingen in de database zijn aangebracht.
SQL Injecties beter voorkomen dan genezen
Er zijn verschillende manieren om SQL-injecties te voorkomen. Zo is het belangrijk om input van gebruikers altijd te valideren en te saniteren voordat deze naar de database wordt gestuurd. Dit kan bijvoorbeeld door het gebruik van Prepared Statements, waarbij specifieke plaatshouders worden gebruikt voor invoer van gebruikers, in plaats van de invoer rechtstreeks naar de database te sturen. Het is ook aan te raden om gebruik te maken van inputvalidatiebibliotheken, zoals OWASP’s AntiSamy, die specifiek zijn ontworpen om SQL-injecties te voorkomen. Daarnaast is het belangrijk om regelmatig updates en patches voor webapplicaties en databases te installeren, om kwetsbaarheden te verminderen.
Hoe ziet een SQL Injectie er in code uit?
3 Voorbeelden van een SQL Injectie. Een SQL-injectie kan in code er op verschillende manieren uitzien, afhankelijk van de manier waarop de webapplicatie is opgezet en hoe de aanvaller probeert toegang te krijgen tot de database. Hieronder staan enkele voorbeelden van hoe een SQL-injectie in code kan eruit zien:
- Gebruik van specifieke tekens om de query te beïnvloeden:
Als een aanvaller bijvoorbeeld een zoekterm invoert in een zoekveld op een website, kan hij specifieke tekens gebruiken om de query te beïnvloeden en ervoor te zorgen dat de database op een ongewenste manier functioneert. Dit kan bijvoorbeeld met behulp van een “OR” statement, waarbij de aanvaller probeert om altijd een waarheid te krijgen.
Voorbeeld:
Input: “test’ OR ‘1’=’1”
SELECT * FROM users WHERE username = ’test’ OR ‘1’=’1′;
In dit voorbeeld zal de query altijd waar zijn, omdat ‘1’ altijd gelijk is aan ‘1’, en zal de database dus alle gebruikers ophalen.
- Gebruik van UNION statements:
Een aanvaller kan ook gebruik maken van UNION statements om informatie uit meerdere tabellen op te halen.
Voorbeeld:
Input: “test’ UNION SELECT * FROM passwords;–“
Code:
SELECT * FROM users WHERE username = ’test’ UNION SELECT * FROM passwords;–‘;
In dit voorbeeld zal de query de gebruikers ophalen met de naam “test”, gevolgd door alle wachtwoorden uit de tabel “passwords”.
- Gebruik van commentaar:
Een aanvaller kan ook gebruik maken van commentaar om de rest van de query uit te schakelen.
Voorbeeld:
Input: “test’; DROP TABLE users;–“
Code:
SELECT * FROM users WHERE username = ’test’; DROP TABLE users;–‘;
In dit voorbeeld zal de query eerst de gebruikers ophalen met de naam “test”, en vervolgens de tabel “users” verwijderen.
Het is belangrijk om te benadrukken dat dit slechts enkele voorbeelden zijn van hoe een SQL-injectie in code kan eruit zien, en dat er veel verschillende manieren zijn om een SQL-injectie uit te voeren. Het is daarom belangrijk om altijd goed op te letten bij het ontwikkelen van webapplicaties.
Wil jij ook SQL kunnen gebruiken, dan is het onderstaande boek een goed begin.