Bescherming tegen SQL-injectie
Voorkom injectieaanvallen
Bescherming tegen SQL-injectie is een gratis Cyber Security Academy-les op CoddyKit. Dit is les 1 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Cyber Security Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Cyber Security Academy bevat in totaal 4 lessen.
Wat is SQL-injectie
SQL-injectie (SQLi) vindt plaats wanneer niet-vertrouwde gebruikersinvoer rechtstreeks aan een SQL-query wordt toegevoegd. De aanvaller smokkelt SQL-syntaxis in een veld dat de applicatie als gewone gegevens verwacht, waardoor de betekenis van de query verandert.
Het blijft een van de schadelijkste kwetsbaarheden in webapplicaties, omdat het volledige databases kan lekken, aanmeldingen kan omzeilen of gegevens kan vernietigen.
Een kwetsbare query
De klassieke fout is tekenreekssamenvoeging. Als de invoer tom is, klopt de query, maar speciaal samengestelde invoer verandert de logica.
- Het enkele aanhalingsteken sluit de tekenreeks voortijdig.
- Alles daarna wordt uitvoerbare SQL.
query = "SELECT * FROM users WHERE name = '" + userInput + "'";
// userInput = tom' OR '1'='1
// becomes: SELECT * FROM users WHERE name = 'tom' OR '1'='1'Authenticatie omzeilen
Inlogformulieren zijn een belangrijk doelwit. Door een voorwaarde in te voegen die altijd waar is en de rest uit te commentariëren, logt een aanvaller zonder wachtwoord in.
De reeks -- maakt de resterende clausule tot commentaar, zodat de wachtwoordcontrole wordt genegeerd.
-- attacker enters in the username field:
admin' --
-- resulting query:
SELECT * FROM users WHERE user = 'admin' --' AND pass = '...'Geparametriseerde query's
De belangrijkste verdediging bestaat uit geparametriseerde query's (voorbereide instructies). De SQL-structuur wordt afzonderlijk van de gegevens verzonden, zodat invoer altijd als waarde en nooit als code wordt behandeld.
Het database-stuurprogramma koppelt de plaatsaanduidingen ? veilig aan de opgegeven waarden.
-- Python (sqlite3 / psycopg)
cur.execute(
'SELECT * FROM users WHERE name = ? AND pass = ?',
(username, password)
)PreparedStatement in Java
Elke belangrijke programmeertaal biedt parametrisering. Gebruik in Java PreparedStatement in plaats van tekenreeksen op te bouwen met Statement.
Gebonden parameters kunnen hun plaats niet verlaten, waardoor injectie hier structureel onmogelijk is.
PreparedStatement ps = conn.prepareStatement(
"SELECT * FROM users WHERE name = ?");
ps.setString(1, userInput);
ResultSet rs = ps.executeQuery();Opgeslagen procedures
Opgeslagen procedures kunnen helpen wanneer ze intern geparametriseerde invoer gebruiken. Let wel op: een opgeslagen procedure die dynamische SQL opbouwt door tekenreeksen samen te voegen, is net zo kwetsbaar.
- Veilig: parameters die aan de procedure worden doorgegeven.
- Onveilig:
EXEC()met samengevoegde tekenreeksen binnen de procedure.
Invoer valideren en allowlists gebruiken
Validatie is een nuttige tweede beveiligingslaag. Gebruik allowlists (accepteer alleen bekende, veilige patronen) in plaats van blocklists (probeer onveilige tekens te verbieden).
Zo moet een veld voor een numerieke ID alles weigeren wat niet uit cijfers bestaat, voordat het ooit de query bereikt.
if not user_id.isdigit():
raise ValueError('invalid id')
# only then use the valueEscapen is een laatste redmiddel
Aanhalingstekens handmatig escapen is kwetsbaar en foutgevoelig. Verschillende databases gebruiken verschillende escape-regels en randgevallen (trucs met codering, tweede-orde-injectie) glippen erdoor.
Geef de voorkeur aan geparametriseerde query's. Gebruik escapen alleen wanneer een ORM of stuurprogramma een specifieke identificator niet kan parametriseren.
Minimale bevoegdheden voor databaseaccounts
Beperk de schade van een geslaagde injectie door minimale bevoegdheden toe te passen op de databasegebruiker van de applicatie.
- Ken alleen
SELECT,INSERTenUPDATEtoe voor benodigde tabellen. - Gebruik nooit een supergebruikersaccount/
root-account voor de applicatie. - Weiger
DROP,FILEen beheerdersrechten.
GRANT SELECT, INSERT, UPDATE ON appdb.orders TO 'webapp'@'%';
REVOKE DROP, ALTER ON appdb.* FROM 'webapp'@'%';ORM's en querybouwers
Moderne ORM's (Hibernate, Sequelize, Django ORM, SQLAlchemy) parametriseren standaard, waardoor het meeste injectierisico verdwijnt.
Het gevaar keert terug wanneer ontwikkelaars overschakelen op onbewerkte SQL of tekenreeksinterpolatie in een querybouwer gebruiken. Geef waarden altijd door als gebonden parameters, ook in de onbewerkte modus.
Diepteverdediging
Geen enkele beveiligingsmaatregel is voldoende. Combineer lagen:
- Overal geparametriseerde query's (de belangrijkste laag).
- Invoervalidatie en allowlists.
- Databaseaccounts met minimale bevoegdheden.
- Een webapplicatiefirewall (WAF) om bekende patronen te onderscheppen.
- Foutafhandeling die nooit SQL of stacktraces lekt.
Korte controle
Toets je begrip van de belangrijkste verdediging.
Samenvatting
Je hebt geleerd hoe SQL-injectie werkt en hoe je die stopt:
- SQLi ontstaat doordat niet-vertrouwde invoer aan query's wordt toegevoegd.
- Geparametriseerde query's zijn de belangrijkste verdediging.
- Voeg validatie met allowlists, databaseaccounts met minimale bevoegdheden en een WAF toe.
- Vermijd handmatig escapen en dynamische SQL in opgeslagen procedures.
Diepteverdediging voorkomt dat één fout uitgroeit tot een datalek.
Leer Cyber Security Academy met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 76
- Lessen
- 303
Veelgestelde vragen
Is de les “Bescherming tegen SQL-injectie” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad Cyber Security Academy, waaronder “Bescherming tegen SQL-injectie”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Cyber Security Academy bevat in totaal 4 lessen.
Wat leer ik in “Bescherming tegen SQL-injectie”?
Voorkom injectieaanvallen Je oefent met Cyber Security Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Cyber Security Academy te beginnen?
Ervaring vooraf is niet nodig. Cyber Security Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.
Hoe lang duurt de les “Bescherming tegen SQL-injectie”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Cyber Security Academy?
Ja. Elke les over Cyber Security Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Bescherming tegen SQL-injectie
- Toegangsbeheer en encryptie
- Auditing en monitoring
- Beveiliging van back-ups en herstel