Mysql Injectie
Omdat vele websites met PHP werken en dit probleem toch wel opvallend veel voorkomt, heb ik besloten hier een artikel voor te schrijven. Als jouw website velden bevat waar bezoekers tekst kunnen invullen, je met cookies samen met een database zoals MySQL heb je zeker al te maken gehad met het probleem. In dit artikel zal ik beschrijven hoe deze injecties juist gebeuren en wat je moet doen om het te voorkomen. Het is niet de bedoeling dat mensen deze tutorial gebruiken om te leren hoe je dit moet doen.
Waar kan MySQL injectie optreden
- Het komt veel voor bij tekstvelden waar de bezoeker iets moet invullen.
- Via de URL, als hier query parameters instaan kan zo ook MySQL injectie optreden.
- Via Cookies, Cookies zodanig aanpassen dat deze je MySQL query andere dingen laten doen.
Hoe wordt het veroorzaakt?
#Een normale query zoals hij zou moeten werken. Een bezoeker vult z'n gemeente in
$gemeente = 'Brussel';//verkregen via $_POST, $_GET, COOKIE of iets dergelijks
mysql_query("SELECT * FROM steden WHERE stad='".$gemeente."'") or die(mysql_error());
#Een gevaarlijke query
$gemeente = "' OR 1 '";
mysql_query("SELECT * FROM steden WHERE stad='".$gemeente."'") or die(mysql_error());
Je kan al raden wat er zal gebeuren. De normale query zal werken zoals gewenst en zoeken naar een ingevulde gemeente. De andere query sluit het het stad gedeelte en plaatst vervolgens andere code. Hierdoor kan indien gewenst informatie opgevraagd worden, informatie verwijderd worden. Nu heb je een beetje een zicht op hoe gevaarlijk SQL injectie wel niet is.
Voorbeeld met delete
$gemeente = "'; DROP TABLE steden;
Nu zal de query de tabel steden deleten. De bezoeker die je database omzeep wil halen weet echter niet wat de naam van je tabel is. Maar dit kan echter vrij gemakkelijk gevonden worden.
De oplossing
Gelukkig kunnen we dit gemakklijk oplossen. Het enige wat je moet doen om deze gevaarlijke aanvallen te voorkomen rond de input van de bezoeker een addslashes functie zetten. Deze zal " converteren naar /" en ' naar /' wat MySQL injectie onmogelijk maakt.
$gemeente = addslashes('Brussel');
- Gebruik van adslashes.
- Backups (hetgeen wat iedereen zegt maar nooit doet)
Er zijn nog geen reacties op dit artikel.
Om op dit artikel te reageren dient u een account aan te maken.



Artikel details
Share

Soortgelijke artikels