Een veilige website: voorkom injectie

Hoe houd je een website veilig?

Als je nadenkt over een nieuwe website of online applicatie, denk je in de eerste plaats aan functionaliteit, inhoud en uitstraling. Wat er achter de schermen gebeurt om de website robuust en veilig te maken is vaak minder duidelijk. Bij Tremani houden we deze 'onzichtbare' kwaliteiten graag voor onze klanten in het oog. Om je een kleine blik in de keuken te geven, schrijven we een aantal blogs over de verschillende soorten aanvallen waar een website tegen bestand moet zijn. Deze keer gaat het over de gevaren van 'injectie'.

Een website biedt aan bezoekers vaak de mogelijkheid om gegevens in te voeren, bijvoorbeeld in een contactformulier. Bij injectie misbruikt een bezoeker die mogelijkheid om data in te voeren zodanig dat hij dingen kan doen die hij normaal niet zou moeten kunnen. Hij 'injecteert' als het ware een stukje kwaadaardige code in de website. Als de website die kwaadaardige code niet onderschept, kan de bezoeker zo bijvoorbeeld op slinkse wijze commando's op de database uitvoeren. Sommige varianten zijn zeer gevaarlijk en zorgen dat een hacker volledige toegang kan krijgen tot de server, en dus naar hartenlust informatie uit je database kan stelen of manipuleren.

Wat kan er fout gaan?
Injectie bestaat in allerlei varianten. Een van de simpelste vormen is het aanpassen van een adres in de adresbalk van de browser om bij andere bestanden te komen. Zo is bijvoorbeeld in 2011 de Miljoenennota uitgelekt, doordat iemand de link van de nota van 2010 heeft genomen en in de adresbalk simpelweg het getal 2010 door 2011 heeft vervangen. Op een vergelijkbare manier zou je in de adresbalk het gebruikers-id kunnen aanpassen om toegang te krijgen tot andermans gegevens. Onze websites ondervangen deze vorm van injectie door altijd te controleren of een gebruiker de opgevraagde link wel mag bekijken.

Een venijniger vorm van injectie vraagt iets meer technische kennis. Hierbij vult de hacker in de adresbalk of een formulierveld tekst in die deels uit programma-code bestaat. Als de applicatie dit niet filtert en de ingevoerde data direct doorgeeft aan bijvoorbeeld de databaseserver of de e-mailserver, dan kan een aanvaller hiermee zijn eigen commando's geven aan deze systemen. Bij een eenvoudig contactformulier kan hij bijvoorbeeld in plaats van zijn naam een commando invullen waarmee een deel van de database compleet wordt verwijderd (onder ingewijden is het verhaal van Bobby Tables een klassieker). En bij een simpel e-mailformulier kan er in het bericht bijvoorbeeld een speciale code opgenomen worden voor {einde e-mail} en {start nieuw bericht}, gevolgd door een e-mailbericht met een hele andere afzender en bestemming. Door dit te doen kan een hacker jouw reactieformulier gebruiken om spam te versturen naar anderen, met alle gevolgen van dien.

Gebruikersinvoer die zonder filter naar de database of het besturingssysteem gaat, is dus altijd ernstig. Hiermee kan een hacker alle data op je site lezen of manipuleren, of zelfs de volledige website overnemen, bijvoorbeeld door in de database het wachtwoord van de beheerder aan te passen. Zelfs als een hacker 'slechts' een tekst op de site aan kan passen, kan dit via 'cross-site scripting' alsnog tot een volledige overname leiden.

Wat kun je hiertegen doen?
Het is belangrijk om alle invoer van buiten goed te filteren, of dit nu via de adresbalk, via invoervelden, of via andere wegen binnenkomt. Er zijn voor vrijwel elke manier waarop invoer verwerkt wordt wel filters beschikbaar die grondig doordacht en beproefd zijn. Doordat we consistent gebruik maken van deze filters en altijd de toegangsrechten controleren, kunnen we injectie-problemen op onze websites voorkomen.

Vragen?
Heb je vragen over dit onderwerp? Neem dan gerust contact met ons op.

Dit artikel is onderdeel van een serie waar we de grootste gevaren die websites bedreigen in begrijpelijke taal uitleggen. Hiervoor volgen we de top-10 van OWASP. Meer technische informatie over dit specifieke risico is te vinden op de pagina OWASP A1.


Meld u aan voor onze nieuwsbrief