Sql injection

Geschreven door: op maandag 3 juli 2017

Leestijd:

sql-injection-database.jpg

 

Gegevens bewaren en opslaan voor een website verloopt bijna altijd via een database. Zie dit als een grote bibliotheek waar gegevens heen geschreven worden en weer uit opgehaald kunnen worden. In deze database staat dus veel informatie over bijvoorbeeld gebruikers zoals email adressen, wachtwoorden, aankoop gegevens en ga zo maar door. Het is daarom belangrijk dat niet iedereen bij deze database kan. Hiervoor is er een login systeem die de toegang weigert aan iedereen die niet het correcte wachtwoord heeft.

Onder de gebruikers die wel toegang hebben zit één speciale gebruiker: de website zelf. Deze heeft uiteraard ook toegang nodig tot de database om gegevens op te slaan en weer op te vragen. Hierbij wordt gebruik gemaakt van een speciale programmeer taal, SQL (Structured Query language). Tijdens het maken van de website worden acties (Query’s) klaar gezet waarmee gegevens van en naar de database kunnen worden verzonden. De gebruiker van de website heeft echter geen invloed op wat wel of niet uit de database wordt gehaald.

 

.. Normaal gesproken ..

 

Hoewel deze query’s niet meer aanpasbaar zijn, kunnen de gegevens die verstuurd worden vaak wel aangepast worden.

 

sql-injection-form.png

 

Stel dat we ons aanmelden voor een nieuwsbrief met het bovenstaande formulier. Deze gegevens zullen worden opgeslagen in de database om later bij het verzenden van de nieuwsbrief weer gebruikt te kunnen worden. Voor deze opdracht zou bijvoorbeeld het volgende sql script geschreven kunnen zijn:

 


INSERT INTO nieuwsbrief_aanmeldingen (naam, emailadres)

VALUES (‘bauke’, ‘b.jansen@sigmasolutions.nl’)
 

 

Hiermee zou worden gezegd: vind de tabel met nieuwsbrief aanmeldingen en voeg een nieuwe rij toe met de volgende waarden. Maar wacht, die waarden hebben we zonet bij het verzenden van het formulier ingevuld. Deze gegevens zijn uit het invulveld gehaald en in de Query gezet om zo opgestuurd te kunnen worden naar de database. Dat betekend overigens dat als we in plaats van bijvoorbeeld een gebruikers naam, een stuk sql code zouden invoeren dit ook gewoon zou worden  uitgevoerd. Dit staat bekend als SQL injectie. Het toevoegen (injecteren) van extra sql script aan een al bestaande query. Een kwaadwillende persoon kan hiermee bijvoorbeeld alle gegevens in de database opvragen .. of verwijderen als hij dat zou willen.

Nu we dit weten is het uiteraard ook belangrijk om te kijken hoe sql injectie voorkomen kan worden. De eerste stap is het controleren van de invoer.  Bepaalde combinaties van tekens die aanduiden dat er sql code wordt uitgevoerd zouden niet voor moeten komen. In sommige gevallen kunnen voor de zekerheid bepaalde tekens zelfs compleet worden verwijderd uit de invoer. Gebruikersnamen bestaan over het algemeen bijvoorbeeld niet uit komma’s of vraagtekens.

Verder is het belangrijk dat de gegevens niet rechtstreeks in de query worden gezet. Hiervoor is een veiligheids laag aanwezig welke via ‘parameters’ de benodigde gegevens meezend zonder dat deze uitgevoerd kunnen worden als code.

Als laatst is consistentie belangrijk. Een van de redenen waarom SQL injectie zo gevaarlijk is, is niet omdat het moeilijk te voorkomen is, maar omdat het vaak op onverwachte plaatsen voor kan komen. Op een website staat vele verschillende formulieren en ook andere gegevens die worden verzonden kunnen vatbaar zijn voor sql injectie. En een aanvaller heeft maar één lek nodig om binnen te komen. Hiervoor is het belangrijk dat alle invoer gecheckt wordt, ook al wordt de invoer optie nog zo weinig gebruikt.


Andere blogartikelen

  • Css grid

    Geschreven door: op dinsdag 20 februari 2018

    Css grid is een vernieuwende manier voor het indelen van content op website pagina’s. Met behulp van css wordt de uiterlijk van een website bepaald. Doormiddel van een grid is het mogelijk om gemakkel ...

    Bekijk het artikel »
  • CSS vendor prefixes

    Geschreven door: op dinsdag 20 februari 2018

    Bij CSS is het voor een aantal stijl regels mogelijk om aan te geven in welke browser deze gebruikt moet worden. Hiervoor wordt het type browser toegevoegd voor de stijl regel. Dit wordt een prefix (o ...

    Bekijk het artikel »
  • CSS auto prefixer

    Geschreven door: op dinsdag 20 februari 2018

    In een eerder blog over vendor prefixes was te zien hoe met behulp van prefixes experimentele stijling regels voor specifieke browser toegepast kunnen worden. Hoewel het gebruik van prefixes in deze ...

    Bekijk het artikel »
Bel 072 5345 888
Meer dan 40 bedrijven vertrouwen op ons
Allrig is de alles in een leverancier binnen de energie-industrie
Aliancys is een toonaangevend wereldwijd bedrijf actief in de verkoop van kwaliteitsharsen
ERIKS is een toonaangevende en innovatieve leverancier aan de procesindustrie en aan machinebouwers, die zowel de rol van specialist als die van brede MRO-leverancier vervult
Industrieel dienstverlener Heinen & Hopman Engineering uit Bunschoten is dé wereldwijde specialist op het gebied van klimaatbeheersing
Handicare is een internationale organisatie die ouderen helpt om hun dagelijks leven gemakkelijker te maken door het produceren van hoogwaardige trapliften
Onze Middelen en Technologieën
microsoft silver partner
Adobe partner
fd gazellen 2017
Google analytics
Google adwords
TelefoonE-mail

whitepaper-customer-selfservice-1.png

Bedien uw klanten optimaal met customer selfservice

Download de whitepaper