woensdag 15 augustus 2012

SQL-injecties grote bedreiging voor vrijwel alle websites

Wat is SQL?

SQL betekent letterlijk Structured Query Language. SQL is niet de database zélf, maar het is simpel gezegd de programmeertaal waarmee de gegevens in de database kunnen worden gelezen of gewijzigd. Iedere website die gebruik maakt van een database (en dat zijn vrijwel alle websites tegenwoordig, van CMS systemen als Joomla en Wordpress tot webshops en social media sites) heeft in zijn programmatuur SQL-opdrachten verwerkt om de gegevens in de database te kunnen lezen en schrijven.

Wat is een SQL-injectie?

Een SQL-injectie (spreek uit: 'sie-kwul'-injectie) is een methode die door hackers wordt gebruikt om de beveiliging van een database te omzeilen en op die manier toegang te krijgen tot de gegevens in die database. Wanneer er toegang is tot de gegevens in de database kan de hacker in principe alle gegevens in die database bekijken, wijzigen, vernietigen of kopiëren. Meestal heeft een hacker weinig goede bedoelingen wanneer hij toegang heeft gekregen tot een database..

Een SQL-injectie is een inbraak in uw website.

Wanneer een hacker een SQL-injectie uitvoert stuurt hij SQL-opdrachten naar de database die niet de bedoeling van de programmeur waren. De programmeur wilde bijvoorbeeld dat de database alleen bepaalde gegevens kon opslaan (denk aan emailadressen en wachtwoorden van gebruikers), maar niet dat die gegevens door website-bezoekers konden worden opgevraagd. Een hacker kan er met een SQL-injectie in slagen om die gegevens toch op te vragen, er er vervolgens alles mee te doen wat hij wil.
Een SQL-injectie is dus niets minder dan een inbraak in uw website met mogelijk grote gevolgen, en moet zo goed mogelijk voorkomen worden.

Verklein het risico op een SQL-injectie.

SQL-injecties kunnen worden voorkomen. Een goede programmeur weet wat hij moet doen om veilige 'scripts' (blokken programmeeropdrachten) te schrijven waarmee SQL-injecties onmogelijk zijn.
Zo zal een goede programmeur onder andere op de volgende zaken letten:
  • Alle ontvangen formuliergegevens van een website worden automatisch gecontroleerd op de aanwezigheid van SQL-injectiescripts;
  • Waar mogelijk maakt men gebruik van white-lists voor ingevoerde gegevens in plaats van black-lists;
  • Men stelt permissies in voor de database toegang zodanig dat de website alleen díe opdrachten mag uitvoeren die voor het functioneren van de site benodigd zijn en blokkeer het uitvoeren van alle overige (supervisor-) opdrachten;
  • Men gebruikt zogenaamde prepared statements;
  • et cetera..

Beveiliging is complex maar noodzakelijk.

Het gevaar van SQL-injecties is groot, maar kan met onder andere bovenstaande methodes vrijwel geheel worden voorkomen. Dat wil dan niet meteen zeggen dat de website en de database dan goed beveiligd zijn. Immers, wanneer wachtwoorden en login-gegevens niet veilig zijn, dan is er überhaupt geen SQL-injectie nodig om toegang tot de gegevens te krijgen.

Website beveiliging is een complex geheel, en verdient alle aandacht. Laat u bij twijfel goed informeren door uw website-bouwer of een onafhankelijk adviseur. De kosten wegen vrijwel altijd ruimschoots op tegen de baten. De bedrijfs- en imagoschades die het gevolg zijn van gehackte websites kunnen enorm zijn..



Uitgebreidere informatie specifiek voor programmeurs lees je onder andere op http://www.unixwiz.net/techtips/sql-injection.html.