Code injection
AanvallenAanval op een onveilige plek in een applicatie. Daarbij verandert de aanvaller iets in de code van het systeem waardoor het programma anders werkt dan voorheen. Voorbeeld van een code injection is SQL-injection.
Code injection is een aanvalstechniek waarbij een aanvaller kwaadaardige code invoegt in een applicatie of systeem via invoervelden, URL-parameters of andere inputkanalen die onvoldoende worden gevalideerd. De ingevoegde code wordt vervolgens uitgevoerd door het systeem alsof het legitieme instructies zijn. Code injection staat al jaren in de OWASP Top 10 van meest kritieke beveiligingsrisico's voor webapplicaties en blijft ook in 2025 een van de meest voorkomende aanvalsvectoren.
Het gevaar van code injection schuilt in de directheid van het effect. Een succesvolle injection-aanval kan een aanvaller volledige toegang geven tot databases, bestanden en in sommige gevallen het onderliggende besturingssysteem. Dit kan leiden tot het stelen van gevoelige gegevens, het manipuleren van data, het wissen van complete databases of het overnemen van de server. Omdat veel organisaties hun bedrijfskritieke processen laten draaien op webapplicaties, vormt code injection een directe bedreiging voor de bedrijfscontinuïteit.
Code injection is nauw verwant aan andere aanvalstechnieken zoals exploits en vormt vaak de eerste stap in een bredere aanval. Een aanvaller kan via code injection toegang krijgen tot een webserver en van daaruit lateraal bewegen door het netwerk, vergelijkbaar met de werkwijze bij ransomware-aanvallen en cyberspionage.
Hoe werkt code injection?
Code injection maakt misbruik van het feit dat veel applicaties gebruikersinvoer direct verwerken zonder deze adequaat te controleren of te zuiveren. De aanvaller voert speciaal geconstrueerde invoer in die door het systeem wordt geïnterpreteerd als uitvoerbare code in plaats van als gewone tekst. Er bestaan verschillende vormen van code injection, elk gericht op een ander type systeem of technologie.
SQL injection is de bekendste vorm. Bij een SQL injection-aanval voegt de aanvaller SQL-databasecommando's in via invoervelden van een webapplicatie. Stel dat een inlogformulier de gebruikersnaam direct in een SQL-query plaatst zonder filtering. De aanvaller kan dan invoer zoals ' OR '1'='1 gebruiken om de authenticatie te omzeilen en toegang te krijgen tot alle gebruikersgegevens. Geavanceerde SQL injection-technieken maken het mogelijk om volledige databases uit te lezen, data te wijzigen of zelfs bestanden op de server te lezen en te schrijven.
Cross-site scripting (XSS) is een andere veelvoorkomende variant. Bij XSS voegt de aanvaller JavaScript-code in die wordt uitgevoerd in de browser van andere gebruikers. Dit kan worden gebruikt om sessiecookies te stelen, gebruikers om te leiden naar phishing-pagina's of malware te installeren. Er zijn drie typen XSS: reflected (de code wordt meegegeven in een URL), stored (de code wordt opgeslagen in de database en aan alle bezoekers getoond) en DOM-based (de code manipuleert het Document Object Model direct in de browser).
Command injection richt zich op het besturingssysteem. Als een webapplicatie gebruikersinvoer doorgeeft aan systeemcommando's zonder adequate sanitatie, kan een aanvaller eigen commando's laten uitvoeren. Dit geeft potentieel volledige controle over de server. LDAP injection, XML injection en template injection zijn verdere varianten die elk inspelen op specifieke technologieën en protocollen die in moderne applicaties worden gebruikt.
Hoe herken je code injection?
Het herkennen van code injection-pogingen vereist zowel technische monitoring als bewustzijn van de signalen. Web Application Firewalls (WAF's) kunnen bekende injection-patronen detecteren in inkomend verkeer. Ze herkennen verdachte tekens en tekenreeksen zoals SQL-commando's, scripttags of systeemcommando's in formulierinvoer, URL-parameters en HTTP-headers.
In applicatielogboeken kun je zoeken naar ongebruikelijke invoerpatronen. Een invoerveld dat is bedoeld voor een naam maar SQL-syntax bevat, of een zoekveld met JavaScript-code, duidt op een injection-poging. Monitor je databaselogs op onverwachte query's, met name query's die grote hoeveelheden data ophalen of proberen systeemtabellen te benaderen.
Foutmeldingen die technische details onthullen aan gebruikers zijn zowel een signaal als een risico. Als een SQL-foutmelding zichtbaar is voor de bezoeker, vertelt deze de aanvaller hoe de database is gestructureerd, wat verdere aanvallen vergemakkelijkt. Zorg ervoor dat foutmeldingen generiek zijn en dat gedetailleerde informatie alleen intern wordt gelogd voor analyse door je beveiligingsteam.
Regelmatige beveiligingsscans met tools zoals OWASP ZAP, Burp Suite of SQLMap kunnen injection-kwetsbaarheden in je applicaties opsporen voordat aanvallers ze misbruiken. Automated security testing als onderdeel van je ontwikkelproces (DevSecOps) helpt om kwetsbaarheden te vangen voordat code in productie gaat.
Hoe bescherm je je tegen code injection?
De belangrijkste verdediging tegen code injection is het correct valideren en zuiveren van alle gebruikersinvoer. Behandel alle invoer als potentieel kwaadaardig, ongeacht de bron. Gebruik parameterized queries (prepared statements) voor alle database-interacties. Dit scheidt de SQL-code van de gebruikersinvoer, waardoor injection onmogelijk wordt. Dit is de meest effectieve maatregel tegen SQL injection en zou standaard moeten zijn in elke applicatie.
Implementeer input validation op basis van een whitelist-benadering. Definieer welke invoer is toegestaan in plaats van te proberen alle mogelijke kwaadaardige invoer te blokkeren. Een veld voor een postcode mag bijvoorbeeld alleen cijfers en letters bevatten van een bepaalde lengte. Alles wat daar niet aan voldoet wordt geweigerd, ongeacht of het kwaadaardig is of niet.
Gebruik output encoding om XSS te voorkomen. Wanneer je gebruikersinvoer teruggeeft aan de browser, codeer dan speciale tekens zodat ze worden weergegeven als tekst in plaats van uitgevoerd als code. Moderne frameworks zoals React, Angular en Vue bieden standaard output encoding, maar let op bij het gebruik van functies die deze bescherming omzeilen.
Zet een Web Application Firewall (WAF) in als extra beveiligingslaag. Een WAF inspecteert al het verkeer naar je webapplicatie en blokkeert bekende aanvalspatronen. Dit is geen vervanging voor veilige code, maar een aanvullende verdediging die ook bescherming biedt tegen aanvalspatronen die je mogelijk hebt gemist. Overweeg het inschakelen van een cybersecurityspecialist voor een grondige code review en penetratietest van je webapplicaties.
Veelgestelde vragen
Wat is het verschil tussen SQL injection en XSS?
SQL injection richt zich op de database van de applicatie en wordt uitgevoerd aan de serverzijde. XSS richt zich op de browser van de gebruiker en wordt uitgevoerd aan de clientzijde. SQL injection steelt data uit de database, terwijl XSS sessies kaapt, gebruikers omleidt of kwaadaardige acties uitvoert namens het slachtoffer.
Kan code injection geautomatiseerd worden?
Ja, er bestaan geautomatiseerde tools die websites scannen op injection-kwetsbaarheden en deze direct exploiteren. Tools zoals SQLMap automatiseren het volledige SQL injection-proces, van detectie tot data-extractie. Dit maakt code injection toegankelijk voor aanvallers zonder diepgaande technische kennis.
Is code injection nog steeds relevant met moderne frameworks?
Ja, hoewel moderne frameworks veel ingebouwde bescherming bieden, blijft code injection relevant. Ontwikkelaars kunnen de ingebouwde bescherming omzeilen door onveilige functies te gebruiken, en legacy-applicaties die niet zijn bijgewerkt blijven kwetsbaar. Configuratiefouten en custom code vormen ook in 2025 nog steeds risico's.
Hoe test je je applicatie op code injection?
Gebruik geautomatiseerde scanners zoals OWASP ZAP of Burp Suite voor een eerste scan. Laat daarnaast een handmatige penetratietest uitvoeren door een ervaren beveiligingsspecialist die creatieve aanvalsscenario's kan bedenken die geautomatiseerde tools missen. Integreer security testing in je ontwikkelproces via SAST en DAST-tools.
Wat zijn de juridische gevolgen van code injection?
Het uitvoeren van code injection-aanvallen op systemen zonder toestemming is strafbaar onder de Nederlandse Wet Computercriminaliteit. Straffen kunnen oplopen tot vier jaar gevangenisstraf. Daarnaast kan het slachtoffer een civiele schadeclaim indienen voor geleden schade door de aanval.
Wil je je webapplicaties laten testen op injection-kwetsbaarheden? Vergelijk penetratietest-aanbieders en beveiligingsspecialisten via oplossingen op IBgidsNL.