Register Globals
Register Globals zijn 1 van de grootste fouten in de php architectuur. Hoewel het door deze functionaliteit makkelijker is om te beginnen met een script, heeft de veiligheid en overzichtelijkheid er alleen maar baat bij als deze op 'Off' staan. Gelukkig staan deze register globals bij veel php 4 hosts ook al uit.
Wat doen ze:
Register globals zorgt ervoor dat je variabelen die het script meekrijgt direct kunt benaderen, zonder te weten waar ze vandaan komen.
Bijvoorbeeld:
Als register_globals aanstaat, kun je in je script $id gebruiken om de waarde te bereiken. Zonder register_globals zul je gebruik moeten maken van $_GET['id'].
Hetzelfde geld voor POST waarden die vaak via een formulier worden doorgegeven:
Met register_globals volstaat: $id
Zonder register_globals: $_POST['id']
Wat is er slecht aan?
Door alleen $id te gebruiken, weet je niet waar de variabele vandaan komt. Komt het uit een formulier waar je het vanaf verwacht? ($_POST), of is het met de URL meegegeven. ($_GET).
Als je een variabele gebruikt zonder eerst een waarde toe te kennen, kan die variabele dankzij register_globals elke waarde hebben, ook schadelijke waarden.
Hoe zie ik of ik ze gebruik?
Lees je scripts door, en kijk voor elke variabele:
1: Of deze variabele een waarde krijgt.
2: Of deze variabele al eerder een waarde gekregen heeft.
Indien je op beide vragen NEE antwoord, kan het zijn dat die variabele beïnvloed wordt door register_globals.
Hoe los ik gebruik van register_globals op?
Ga voor alle variabelen waar beide vragen NEE opleverden kijken of je een waarde verwacht, en welke.
Verwacht je dat de variabele zijn inhoud krijgt uit een formulier? Gebruik dan $_POST['variabele_naam'].
Wordt de waarde meegegeven in de URL? Gebruik dan $_GET['variabele_naam'].
Hoort de variabele geen waarde te hebben? Ken deze een lege string ('') toe, of de waarde 'null'.
Zijn er nog hulpmiddelen?
Jazeker, error_reporting() op E_ALL zetten. Mocht je een variabele geen waarde toekennen voordat deze gebruikt wordt, dan zul je een waarschuwing te zien krijgen. Op die manier kun je eenvoudig elk fout gebruik opsporen.