Register_globals? zorg dat u het niet nodig heeft

register_globals in PHP

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 vele scripts die destijds op onze servers draaiden 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 misbruikt. Daarom hebben we besloten het gebruik van register_globals zo snel mogelijk uit te faseren.

 

Ik heb bestaande scripting geïnstalleerd, en 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 een script geschreven, en 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']

     

    Voorbeeld van juiste implementatie

    Roept u uw script aan met een URL zoals

    script.php?test=xyz

    dan zet u bovenaan uw script:

     

    $test = $_GET['test'];

     

    En als het niet lukt?

    In principe heeft u als site-beheerder de volledige verantwoordelijkheid over alle scripting en ligt daar een duidelijke scheidingslijn tussen de hoster en de designer/programmeur. Raadpleeg altijd uw webdesigner/programmeur en probeer in samenspraak tot een oplossing te komen. In het uiterste geval kunnen wij voor uw website een uitzondering maken door u te voorzien van een eigen php.ini (PHP configuratie bestand) waarin register_globals is geactiveerd. Dit moet echter gezien worden als een laatste redmiddel waarmee het risico op misbruik van uw webapplicaties ernstig wordt verhoogd!

    • 1 Gebruikers die dit bruikbaar vonden
    Was dit antwoord behulpzaam?

    Gerelateerde artikelen

    Welke versie van PHP draaien jullie?

    Wij draaien eerst komende tijd php 4 en 5 dit om mensen met oude php scripts rustig de kans te...

    ASP hebben jullie dat?

    Nee, wij bieden geen ondersteuning voor ASP. Deze scripting taal wordt vooral gebruikt op Windows...

    CGI en Perl pad en map?

    Hoewel we het gebruik van Perl en CGI scripts sterk zien afnemen en het ons opvalt dat het steeds...

    Bestanden en rechten CHMOD?

    CHMOD zijn rechten die een bestand heeft om uitgevoerd of gelezen te kunnen worden door een...

    Ioncube, mysqli, mod_rewrite, zend optimizer dat hebben jullie allemaal?

    Ja, dit ondersteunen wij allemaal, wij ondersteunen vrijwel elke bekende en meest gevraagde...