Ik hoop dat je hier nog wat checks op de ingevoerde informatie loslaat. Probeer even uit te vinden wat er gebeurd als ik in de var $berichten het volgende zet:
PHP:
1
| $bericht = "bla';'123.123.123.123';'99999'); DROP TABLE berichten"; |
Wat hints kun je op google en de bekende documentatiepagina's vinden, een mogelijk keyword
SQL injection.
Lees ook even dit hier:
http://www.php.net/manual...n.mysql-escape-string.php
Je moet dus goed kijken wat je een je database voert voordat je de parameters uit de request zo maar gebruikt, denk bij elke variabele die je gebruikt over de volgende dingen goed na:
- moet ik deze wel via de request verkrijgen?
- Welke waardes mag deze variabele hebben, welke waardes zijn zinvol?
- In hoeverre kun je voorspellen wat de input moet zijn?
Als je de request variabele ook in je scriptje kunt genereren, doe dat dan.
Bouw checks in je code die alleen de zinvolle opties voor de variabele toelaten.
De derde vraag doelt er een beetje op dat je niet direct de variabele uit de request gebruikt, maar er een soort wrapper voor gebruikt, bijvoorbeeld op zo'n manier:
PHP:
1
2
3
4
5
6
7
| $id = $_GET['id'];
$a[1] = 'alpha';
$a[2] = 'beta';
$a[3] = 'gamma';
doeiets($a[$id]); |
Op deze manier weet je zeker dat er alleen alpha, beta of gamma aan doeiets() gevoerd wordt, en geen waardes die je code breken of exploiten.
Het is trouwens ook aan te raden je code zo te schrijven dat die ook met register_globals off werkt, dat betekent wel wat meer code, maar het is waarschijnlijk veiliger en voorkomt dat je code op server met defaultinstellingen en nieuwere php versies ook werkt.
Everyone complains of his memory, no one of his judgement.