Naar de inhoud

SQL-injectie

Bij SQL-injectie veranderen externe gegevens de structuur van een databasequery. Parameterbinding verwerkt waarden en controleert geen toegangsrechten.

IT-beveiliging

SQL-injectie betekent dat delen van SQL-instructies worden binnengesmokkeld via gegevens die een applicatie verwerkt. Worden zulke waarden in de tekst van een query opgenomen, dan kunnen ze de betekenis ervan veranderen. Welke gegevens leesbaar of wijzigbaar zijn, hangt onder meer af van de rechten van het gebruikte databaseaccount.

Projectfilter en querystructuur scheiden

Een fictief ticketportaal zoekt vermeldingen bij een projectreferentie. Het behandelt de waarde uit het veld projectRef als een gebonden queryparameter: de querystructuur staat vast en de waarde wordt afzonderlijk via de database-interface doorgegeven. Ze moet een zoekwaarde blijven en geen onderdeel van de SQL-syntaxis worden.

Een query pas voorbereiden nadat die uit invoer is samengesteld, brengt deze scheiding niet tot stand. Ook eerder opgeslagen gegevens of waarden uit andere systemen mogen bij een latere queryopbouw niet ongecontroleerd SQL-tekst worden.

Waarden binden en de structuur vastleggen

Een sorteerveld zoals sortKey is een ander geval. Plaatshouders voor gegevenswaarden vervangen geen willekeurige kolomnamen of sorteerrichtingen. De applicatie koppelt bekende keuzes daarom aan vaste, in de code bepaalde kolommen en richtingen. OWASP beschrijft dit onderscheid tussen parameterbinding en toegestane structuurkeuzes uitdrukkelijk.

Parameterbinding controleert bovendien niet of de aangemelde persoon het gevraagde project mag openen. Die autorisatiecontrole blijft de taak van de applicatie. Een databaseaccount met alleen de benodigde rechten kan mogelijke schade beperken; het neemt de onveilige queryopbouw zelf niet weg.

Bronnen