Geparametriseerde SQL, ook wel voorbereide instructies genoemd, is een techniek die wordt gebruikt bij de ontwikkeling van webapplicaties om kwetsbaarheden voor SQL-injectie te verminderen. Het omvat het gebruik van tijdelijke aanduidingen in SQL-query's die later worden vervangen door door de gebruiker aangeleverde waarden. Door de querylogica te scheiden van de gebruikersinvoer, helpt geparametriseerde SQL voorkomen dat kwaadaardige SQL-code wordt uitgevoerd.
Wanneer een webtoepassing geparametriseerde SQL gebruikt, wordt de SQL-query eerst voorbereid door de toepassingsserver voordat enige gebruikersinvoer wordt opgenomen. De query wordt naar de databaseserver gestuurd met tijdelijke aanduidingen voor de door de gebruiker opgegeven waarden. Deze tijdelijke aanduidingen worden meestal weergegeven door vraagtekens of benoemde parameters. De databaseserver compileert en optimaliseert vervolgens de query, zonder rekening te houden met de werkelijke waarden.
Zodra de query is voorbereid, wordt de gebruikersinvoer gebonden aan de tijdelijke aanduidingen en worden deze vervangen door de juiste waarden. Het bindingsproces zorgt ervoor dat de gebruikersinvoer wordt behandeld als gegevens en niet als uitvoerbare code. Deze scheiding van de querylogica en gebruikersinvoer voorkomt SQL-injectieaanvallen omdat de databaseserver weet dat de gebruikersinvoer moet worden geïnterpreteerd als gegevens, niet als onderdeel van de querystructuur.
Door geparametriseerde SQL te gebruiken, kunnen webapplicaties kwetsbaarheden voor SQL-injectie effectief verminderen. Hier zijn enkele belangrijke voordelen van deze aanpak:
1. Bescherming tegen SQL-injectie: geparametriseerde SQL zorgt ervoor dat gebruikersinvoer wordt behandeld als gegevens, waardoor de mogelijkheid van kwaadaardige SQL-code-injectie wordt geëlimineerd. Aangezien de gebruikersinvoer wordt behandeld als een waarde, zelfs als deze speciale tekens of SQL-syntaxis bevat, wordt deze niet geïnterpreteerd als onderdeel van de querystructuur.
Neem bijvoorbeeld de volgende kwetsbare SQL-query zonder parametrering:
SELECT * FROM users WHERE username = 'admin' AND password = '<user_input>';
Een aanvaller kan deze query misbruiken door `' OF '1'='1' –` in te voeren als de gebruikersinvoer, waardoor de wachtwoordcontrole effectief wordt omzeild. Door gebruik te maken van geparametriseerde SQL zou de query er echter als volgt uitzien:
SELECT * FROM users WHERE username = 'admin' AND password = ?;
De gebruikersinvoer is gebonden aan de tijdelijke aanduiding, waardoor pogingen tot SQL-injectie worden voorkomen.
2. Verbeterde prestaties: geparametriseerde SQL-query's kunnen één keer worden voorbereid en meerdere keren worden uitgevoerd met verschillende waarden. Dit vermindert de overhead van het ontleden en optimaliseren van de query telkens wanneer deze wordt uitgevoerd. Voorbereide instructies kunnen door de databaseserver in de cache worden geplaatst, wat resulteert in verbeterde prestaties voor vaak uitgevoerde query's.
3. Preventie van syntaxisfouten: geparametriseerde SQL helpt syntaxisfouten te voorkomen die worden veroorzaakt door onjuist opgemaakte gebruikersinvoer. De databaseserver behandelt de gebruikersinvoer als gegevens en zorgt ervoor dat deze de querystructuur niet verstoort.
4. Database-abstractie: geparametriseerde SQL zorgt voor een betere database-abstractie, aangezien de applicatiecode niet op de hoogte hoeft te zijn van de specifieke syntaxis of structuur van de onderliggende database. Dit maakt het gemakkelijker om te schakelen tussen verschillende databasesystemen zonder de applicatielogica te wijzigen.
Geparametriseerde SQL is een krachtige techniek voor het verminderen van SQL-injectiekwetsbaarheden in webapplicaties. Door de querylogica te scheiden van gebruikersinvoer en door de gebruiker aangeleverde waarden als gegevens te behandelen, biedt geparametriseerde SQL een robuuste verdediging tegen SQL-injectieaanvallen. De voordelen zijn onder meer bescherming tegen SQL-injectie, verbeterde prestaties, preventie van syntaxisfouten en betere database-abstractie.
Andere recente vragen en antwoorden over Basisprincipes van beveiliging van EITC/IS/WASF-webapplicaties:
- Wat zijn headers voor ophaalmetagegevensverzoeken en hoe kunnen ze worden gebruikt om onderscheid te maken tussen verzoeken van dezelfde oorsprong en verzoeken van meerdere sites?
- Hoe verkleinen vertrouwde typen het aanvalsoppervlak van webapplicaties en vereenvoudigen ze beveiligingsbeoordelingen?
- Wat is het doel van het standaardbeleid in vertrouwde typen en hoe kan het worden gebruikt om onveilige tekenreekstoewijzingen te identificeren?
- Wat is het proces voor het maken van een vertrouwd typen-object met behulp van de vertrouwde typen-API?
- Hoe helpt de richtlijn vertrouwde typen in een inhoudbeveiligingsbeleid DOM-gebaseerde cross-site scripting (XSS)-kwetsbaarheden te verminderen?
- Wat zijn vertrouwde typen en hoe pakken ze DOM-gebaseerde XSS-kwetsbaarheden in webapplicaties aan?
- Hoe kan content security policy (CSP) helpen bij het verminderen van cross-site scripting (XSS) kwetsbaarheden?
- Wat is cross-site request forgery (CSRF) en hoe kan dit worden misbruikt door aanvallers?
- Hoe brengt een XSS-kwetsbaarheid in een webapplicatie gebruikersgegevens in gevaar?
- Wat zijn de twee belangrijkste soorten kwetsbaarheden die vaak worden aangetroffen in webapplicaties?
Bekijk meer vragen en antwoorden in EITC/IS/WASF Web Applications Security Fundamentals