|
Superglobals zijn speciale variabelen ingebakken in PHP. Deze bestaan al een hele tijd, maar pas bij de intrede van PHP 5 is het gebruik ervan echt goed ingeburgerd geraakt toen duidelijk werd dat vele scripts niet veilig waren.
Gebruik van variabelen
Variabelen worden gebruikt om informatie op te slaan en in een script te verwerken.
Voorbeelden van gegevens die in een variabele gestopt kunnen worden zijn de opgevraagde pagina door de bezoeker, een gegeven dat je in een formulierveld invoert, een cookie die door je website geplaatst wordt enzovoort.
Stel dat je een verzendknop de naam "verzenden" hebt meegegeven, dan zal je script eerst checken of er op de verzendknop is geklikt om daarna het script uit te voeren:
<?php
if($verzenden) {
... voer script uit ...
}
?>
<form method="post" action="pagina.php">
<input type="text" name="leeftijd" />
<input type="submit" name="verzenden" />
De variabele $verzenden is hier dus afkomstig van de verzendknop van het formulier. Een variabele met dezelfde naam zou echter ook elders gebruikt kunnen worden, bijvoorbeeld in de adresbalk van je browser.
Het gevaar hierbij is dat je de waarde van de variabele $verzenden kan gaan manipuleren.
Misbruik van variabelen
Iemand die http://www.jewebsite.be/?verzenden=kwaadwillende_code invoert kan via de url een eigen waarde toevoegen aan het script.
In dit geval is deze waarde "kwaadwillende_code", maar er zouden ook speciale tekens ingevoerd kunnen worden die het resultaat van je queries kan beïnvloeden.
Het is dus niet zeker dat de variabele wel uit het formulier wordt gehaald! Om dit te vermijden bestaan er superglobals.
Dit zijn codes die bij een variabele staan om de oorsprong van de variabele aan te duiden. In plaats van $verzenden gebruiken we voortaan:
$_POST['verzenden']: hier gaat het om de variabele $verzenden afkomstig uit een formulier (post)
$_GET['verzenden']: hier gaat het om de variabele $verzenden afkomstig uit de adresbalk (get)
Merk op dat het dollarteken bij de variabelenaam vervalt en aan het begin staat.
Soorten superglobals
De volgende superglobals bestaan:
COOKIE: variabelen met herkomst een cookie door PHP geplaatst
ENV: variabelen afkomstig van de serverconfiguratie (standaard zijn deze geblokkeerd omdat deze interne informatie zeer handig kan misbruikt worden door hackers)
FILES: variabelen met herkomst een bestandsinvoerveld
GET: variabelen met herkomst in de adresbalk
POST: variabelen met herkomst in een formulier
REQUEST: variabelen met herkomst een serveropdracht
SESSION: variabelen door een PHP-sessie gebruikt
SERVER: variabelen afkomstig vanaf de gebruikte server over de gebruikte browser, server, websitelocatie,...
Superglobal $_SERVER
De $_SERVER-variabelen kun je gebruiken om meer informatie over je website en serverconfiguratie te verkrijgen: je useragent, serverinformatie, ...
Hieronder vind je een handige opsomming van alle $_SERVER-variabelen met een voorbeeld:
- DOCUMENT_ROOT = c:/phpdev/www/
- GATEWAY_INTERFACE = CGI/1.1
- HTTP_ACCEPT = image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*
- HTTP_ACCEPT_CHARSET =
- HTTP_ACCEPT_ENCODING = gzip, deflate
- HTTP_ACCEPT_LANGUAGE = nl-be
- HTTP_CONNECTION = Keep-Alive
- HTTP_HOST = localhost
- HTTP_REFERER = http://localhost/
- HTTP_USER_AGENT = Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)
- PATH_TRANSLATED = c:/phpdev/www/testen.php
- PHP_SELF = /testen.php
- QUERY_STRING =
- REMOTE_ADDR = 127.0.0.1
- REMOTE_PORT = 2099
- REQUEST_METHOD = GET
- REQUEST_URI = /testen.php
- SCRIPT_FILENAME = c:/phpdev/www/testen.php
- SCRIPT_NAME = /testen.php
- SERVER_ADMIN =
Dit e-mailadres is beschermd tegen spambots. U heeft Javascript nodig om het te kunnen zien.
- SERVER_NAME = localhost
- SERVER_PORT = 80
- SERVER_PROTOCOL = HTTP/1.1
- SERVER_SIGNATURE = Apache/1.3.27 Server at localhost Port 80
- SERVER_SOFTWARE = Apache/1.3.27 (Win32) PHP/4.2.3
Het bovenstaande voorbeeld toont de fictieve gegevens van een bestand testen.php dat draait op een lokale server.
Het zou immers niet veilig zijn om deze gegevens publiekelijk te laten uitlezen van de server waarop deze website draait.
Hackers zouden maar al te blij zijn met deze gegevens die ze vervolgens kunnen gebruiken om beveiligingslekken op te sporen.
|