SQL-injectie
De term SQL-injectie (Engels: SQL injection) wordt gebruikt voor een type kwetsbaarheid van computerapplicaties, meestal webapplicaties. Applicaties die informatie in een database opslaan maken gebruik van SQL om met de database te communiceren. SQL-injectie kan gebeuren als invoer van gebruikers op onvoldoende gecontroleerde wijze wordt verwerkt in een SQL statement. Om de precieze werking van SQL-injectie te begrijpen is het belangrijk om te weten hoe SQL werkt.
Rol van de apostrof in SQL
In SQL heeft de apostrof een belangrijke functie, namelijk het afbakenen van niet-numerieke gegevens. Om bijvoorbeeld alle personen met de naam "Jansen" te selecteren uit een tabel wordt het volgende statement gebruikt
SELECT * FROM persoon WHERE achternaam = 'Jansen'
In een applicatie waar gezocht kan worden naar personen, zal de gebruiker in het zoekveld uitsluitend "Jansen" invullen. In de applicatie wordt op basis van deze invoer bovenstaande code naar de database gestuurd.
Interessant wordt het als de gebruiker een apostrof in het zoekveld invult, bijvoorbeeld "'t Hart". In een correct statement moet dan namelijk de apostrof worden verdubbeld.
SELECT * FROM persoon WHERE achternaam = '''t Hart'
Als dat niet gebeurt, dan is het bovenstaande statement onbegrijpelijk voor de database, en volgt een foutmelding. Maar het betekent ook dat de applicatie niet beschermd is tegen SQL-injectie.
SQL-injectie
SQL-injectie bestaat er uit dat een gebruiker in het invoerveld tekens invoert die er voor zorgen dat er een ongewenste SQL wordt uitgevoerd. Daarbij wordt gebruik gemaakt van de apostrof. Dat werkt alleen als bij het genereren van de SQL code op basis van gebruikersinvoer de apostrof niet verdubbeld wordt.
De gebruiker typt bijvoorbeeld "Jansen' OR 1 = 1" in het zoekveld. Het resulterende statement is dan
SELECT * FROM persoon WHERE achternaam = 'Jansen' OR 1 = 1'
Omdat "1 = 1" altijd waar is, voldoet nu elk record aan de gestelde voorwaarde.
Bovenstaand voorbeeld is nog redelijk onschuldig, omdat de hacker alleen extra informatie kan ophalen. Dezelfde methode levert echter de mogelijkheden om nieuwe informatie aan de database toe te voegen, bestaande informatie aan te passen en informatie te verwijderen. Daarvoor is informatie nodig over de structuur (namen van tabellen en kolommen) van de database. De naamgeving van tabellen en kolommen is om begrijpelijke redenen echter meestal logisch en dus voorspelbaar. Daarnaast kan de hacker ook diverse zaken uitproberen.