SQL-injectie
Bij SQL-injectie veranderen externe gegevens de structuur van een databasequery. Parameterbinding verwerkt waarden en controleert geen toegangsrechten.
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
Verwante begrippen
- DatabaseEen georganiseerde gegevensverzameling die software gericht kan raadplegen en wijzigen.
- SQLEen taal om gegevens te definiëren, op te vragen en te wijzigen; geen afzonderlijk databaseproduct.
- Objectrelationele mappingProgrammaobjecten koppelen aan gegevens in een relationele database.
- DataminimalisatieDataminimalisatie beperkt persoonsgegevens tot wat passend, relevant en noodzakelijk is voor een bepaald doel.
- Bewaarbeleid voor gegevensEen bewaarbeleid bepaalt doel, begin, duur en einde van opslag. Verwijderingstaken en kopieën moeten technisch worden meegenomen.
- EnvelopversleutelingEnvelopversleuteling scheidt de gegevenssleutel van de sleutel die deze beschermt. Versleuteld bestand en verpakte gegevenssleutel horen bij elkaar.
Uw project met ASES
Beschrijf ons uw project. We nemen contact met u op met een eerste inschatting.