Een van de grootste soorten webkwetsbaarheden staat bekend als "SQL-injectie" of SQLi. Structured Query Language, ook wel SQL genoemd, is de taal die wordt gebruikt voor interactie met de meeste databases, hoewel er een aantal varianten van de taal worden gebruikt, afhankelijk van het databaseplatform. Elke website die gebruikersgegevens opslaat, zoals accountinformatie, of die gebruikers uploadfunctionaliteit biedt, zoals een website voor het hosten van afbeeldingen, gebruikt een database om die gegevens op te slaan.
Tip: SQL wordt over het algemeen uitgesproken als "ess cue ell" of "sequel", waarbij de eerste optie vaker voorkomt in het Brits-Engels en de tweede meer voorkomt in het Amerikaans-Engels. Beide uitspraken worden over het algemeen begrepen in de context van praten over databases.
Wat is SQLi?
SQLi is een kwetsbaarheid waarbij de webontwikkelaars die de code ontwerpen die tussen de webserver en de database communiceert, geen beveiliging implementeren tegen SQL-opdrachten die door een gebruiker worden verzonden. Het probleem is dat het mogelijk is om uit database-statements te ontsnappen en nieuwe argumenten of een geheel nieuw statement toe te voegen. De gewijzigde of tweede database-instructie kan een reeks acties uitvoeren, waaronder mogelijk grootschalige verwijderingen of gegevenslekken.
Exploits draaien meestal om het maken van bestaande uitspraken in alle omstandigheden of het leveren van een tweede batch-opdracht die een specifieke actie uitvoert, zoals het verwijderen of weergeven van alle gegevens. Een SQL-instructie om in te loggen op een website kan bijvoorbeeld controleren of de ingediende gebruikersnaam en het wachtwoord overeenkomen met een invoer in de database. Om te proberen toegang te krijgen, kan een SQL-injectie-exploit proberen een "or true" -clausule toe te voegen, zoals "or 1=1". Dit zou de opdracht maken in de trant van "login met [deze] gebruikersnaam, als het wachtwoord [dit] is, of deze verklaring waar is".
Hoe SQLi . te voorkomen
SQLi was vroeger een veel voorkomende manier voor websites om hun database te laten lekken en vervolgens online te laten lekken. Dankzij een gezamenlijke inspanning om ervoor te zorgen dat beveiligingsbewustzijn deel uitmaakt van de training van ontwikkelaars, is deze klasse van kwetsbaarheden grotendeels opgelost en wordt ze nog maar zelden gezien.
De juiste methode om SQLi te voorkomen, is het gebruik van voorbereide instructies, ook wel geparametriseerde query's genoemd. Traditioneel worden SQL-instructies gedeclareerd en wordt de invoer van de gebruiker daarin samengevoegd tijdens die declaratie. Met voorbereide instructies wordt de databaseopdracht uitgeschreven en vervolgens voert een afzonderlijke functie de opdracht uit en voegt gebruikersgegevens in. Hoewel dit misschien een klein verschil lijkt, verandert het de manier waarop met de opdracht wordt omgegaan volledig. Het verschil voorkomt dat zinvolle SQL-opdrachten worden uitgevoerd en behandelt alle gebruikersinvoer als een tekenreeks, waardoor SQL-injectie wordt voorkomen.