PHP Register Globals

Uit Byte Docs

Inhoud

Uitfaseren register globals

Register_globals is een feature van PHP. Deze feature zorgt ervoor dat allerlei variabelen automatisch worden ingesteld aan de hand van GET, POST, SERVER, SESSION en COOKIE parameters. Dit kan handig zijn, omdat het initialiseren van variabelen dan niet meer hoeft. Tegenover dit kleine voordeel staat een enorm beveiligingsrisico. Register_globals biedt namelijk vele mogelijkheden om onveilige code te schrijven.

Bekijk het volgende voorbeeld (bron
php.net) :
<?php
// $beheerder is alleen true indien ingelogd
if (beheerder_ingelogd()) {
   $beheerder = true;
}
 
// Omdat $beheerder niet werd geinitialiseerd met de waarde
// "false", zou iedereen het script aan kunnen roepen als
// GET script.php?beheerder=1 en in kunnen loggen als beheerder!
if ($beheerder) {
   include "/vertrouwelijke/data.php";
}
?>

De situatie

Vanwege de grote kans op onveilige code is in april 2002 door het PHP ontwikkelteam besloten om register_globals standaard uit te zetten. Omdat bij Byte toen veel applicaties draaiden die voor een goede werking afhankelijk waren van register_globals, hebben wij (en veel andere providers) het aan laten staan.

Dit ging lange tijd goed, maar de situatie is veranderd. De laatste maanden worden er steeds meer beveiligingslekken gepubliceerd van het type register_globals. Deze worden actief misbruikt door hackers en virussen. We moeten vrijwel dagelijks sites uitschakelen omdat deze via een register globals lek zijn gecompromitteerd. Daarom hebben we besloten het gebruik van register_globals zo snel mogelijk uit te faseren.

Ik heb een PHP applicatie geïnstalleerd, wat nu?

Slechts een deel van alle PHP applicaties maakt gebruik van register_globals. Om uit te vinden of uw applicatie goed functioneert zonder register_globals, kunt u informeren bij de leverancier of ontwikkelaar. Bij oudere applicaties (zeg meer dan een jaar oud) is de kans groot dat ze register_globals gebruiken.


Werkt alles naar behoren, dan hoeft u zich geen zorgen te maken.

Blijkt de applicatie niet goed te werken of krijgt u negatief bericht van de leverancier, dan dient u te upgraden naar een versie van de software die niet afhankelijk is van register_globals.

Bekende applicaties die niet afhankelijk zijn van register_globals (in ieder geval de meest recente versies) 
* Joomla
  • Gallery
  • Mambo
  • phpBB
Applicaties waarvan oudere versies vereisen dat register_globals aanstaan 
* Geeklog
  • OSCommerce

Ik heb zelf code geschreven, wat nu?

Heeft u zelf PHP code geschreven die gebaseerd is op register_globals, dan dient u deze code zo snel mogelijk om te schrijven. Het enige wat u hoeft te doen is uw variabelen te initialiseren. Dit gaat a.d.h.v. de volgende tabel. Gebruikte u voorheen de variable $test die automatisch ingesteld werd, dan dient u deze nu te initialiseren met
$_COOKIE['test']
$_SESSION['test']
$_GET['test']
$_POST['test']
$_SERVER['test']

Roept u uw script aan met een URL zoals

script.php?test=xyz

dan zet u bovenaan uw script:

$test = $_GET['test'];

If all else fails...

Kunt of wilt u uw code niet omschrijven, dan is er een laatste mogelijkheid. U kunt dan via het service panel register_globals aanzetten voor uw site. Maar let op!

Het blijven gebruiken van register_globals raden wij met klem af. Er is een reële mogelijkheid dat uw site binnenkort gehackt wordt. Bovendien is een migratie op termijn onvermijdelijk, aangezien nieuwere PHP versies helemaal geen register_globals meer zullen ondersteunen.
De huidige waardering is: 88/100 (1 stemmen)
 You need to enable JavaScript to vote
  • Deze pagina is het laatst bewerkt op 29 nov 2011 om 13:10.
  • Deze pagina is 940 keer bekeken.

We proberen de kwaliteit van onze kennisbank voortdurend te verbeteren.
Geef de informatie op deze pagina een waardering met de slider hierboven.