Suche
Suche Menü

PHP 4.2.0 – keine Globals mehr!

Die Endversion von php 4.2.0 steht vor der Tür - mit einigen wichtigen Änderungen. Die wohl wichtigste ist, daß register_globals ab sofort standardmäßig deaktiviert ist. Diese Entwicklung war schon mit Version 4.1 absehbar (mit der ja einige neue Variablen eingeführt wurden, um auf die ehemaligen "globalen" zugreifen zu können). Was heisst das für die Praxis?

Alle Scripts, die sich auf globale Variablen verlassen, funktionieren nicht mehr wie gewohnt. Ähnlich wie in Perl muß man erst die übergebenen Variablen dezitiert auslesen, um drauf zugreifen zu können. Die mit Version 4.1.0 eingeführten neuen Variablen sind folgende Arrays:

$_GET - beinhaltet alle Formvariablen, die via GET übergeben wurden
$_POST - beinhaltet alle Formvariablen, die via POST übergeben wurden
$_COOKIE - beinhaltet Cookie-Variablen
$_SERVER - beinhaltet Server-Variablen (z.b., REMOTE_ADDR)
$_ENV - beinhaltet die Umgebungsvariablen.
$_REQUEST - eine Mischung aus GET, POST und Cookie-Variablen - also alles an Information, das dem Script mitgegeben wurde. Eine Variablenwurst, die also eigentlich als nicht vertrauenswürdig einzustufen ist.
$_SESSION - beinhaltet alle registrierten Session-Variablen.

Um also mit zukünftigen PHP-Versionen kompatibel zu bleiben, sollte man sich in seinen Scripts nicht mehr drauf verlassen, daß globale Variablen zur Vefügung stehen. Klar kann man in der php.ini register_globals auch in der neuen Version auf "On" stellen - es wird allerdings in der Weiterentwicklung offiziell nicht mehr unterstützt.
Man kann die Rückwärtskompatibiltät recht einfach erhalten, indem man in den Start des Scripts eine Versionsabfrage einbaut:

  1. <?
  2. if (phpversion()>= "4.1.0") {
  3. $variable1 = $_POST["variable1"];
  4. $variable2 = $_POST["variable2"];
  5. $cookie = $_COOKIE["dascookie"];
  6. $REMOTE_ADDR = $_SERVER["REMOTE_ADDR"];
  7. ...und alle weiteren, die das Script braucht...
  8. }
  9.  
  10. ...und ab hier geht das Script ganz normal weite

So kann man sichergehen, daß die Scripts auch ab Version 4.2.0 korrekt funktionieren. Der Umstieg wird also halb so tragisch - und einige Sicherheitsprobleme durch die globale Variablenübergabe können gar nicht mehr auftreten. Zumindestens wenn man das Auslesen der Variablen gleich dazu benutzt, diese auf Gültigkeit zu überprüfen, was immer wieder vernachlässigt wird.

2 Kommentare Schreibe einen Kommentar

  1. nachdem Du ja auch schon in den Eingeweiden von Sunlog herumgewurschtelt hast: gibts irgendwas daran zu ändern um kompatibel zu bleiben?

  2. Bei Sunlog müsste in jeder Datei, an die Variablen übergeben werden, die Abfrage rein, in der man alle Variablen ausliest. Sonst kann nicht einmal die entry.php unter php 4.2 etwas ausgeben. Dort wäre das dann z.b. so möglich:

    if (phpversion()>= „4.1.0“) {
    $id = $_GET[„id“];
    }

    Kann man aber recht simpel testen – einfach auf einer Testmaschine in der php.ini register_globals auf Off setzen – und dann schauen, was alles nicht funktioniert. Es wird eine Menge sein…mir grausts schon jetzt davor, alle älteren Scripts umzubauen. Ich test mich grad durch…

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.


ACHTUNG: Dieser Beitrag ist über 5 Jahre alt. Möglicherweise findest Du in neueren Einträgen in diesem Weblog aktuellere Informationen zu diesem Thema. Verwende dazu die Suchfunktion rechts oben in der Seitenleiste. Beachte auch die Information über ältere Beiträge!