Ankündigung

Einklappen
Keine Ankündigung bisher.

Mal wieder Register Globals

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Mal wieder Register Globals

    Es wird ja nicht zu Unrecht vor den Problematiken gewarnt, die mit der php.ini-Einstellung register globals = on auftreten.

    Ich bin jetzt über etwas gestolpert, dass ich in solchen Warnhinweisen entweder nicht gesehen, oder übersehen habe, und das mich eine Stunde intensiver Debugging-Arbeit gekostet hat.

    Ein Script, das bei Register Globals = off lief, machte auf einer anderen Maschine mit der Einstellung = on Unsinn. Ich dachte, ich mach das hier mal öffentlich, damit andere nicht auch reinfallen.

    Ich habe eine Variable $id. Diese wird dann gesetzt, wenn ein Kunde sich anmeldet. Diese Variable wollte ich mit

    PHP-Code:
    session_start();
    $_SESSION['id '] = $id
    verwahren, um sie dann im Memberbereich immer wieder benutzen zu können. Das klappte auch alles so, wie geplant.

    Auf der anderen Maschine veränderte sich $_SESSION['id '] aber gelegentlich. Durch Ausgabe von print_r($_SESSION) habe ich das Problem auf eine Zeile zurückführen können, in der $id verändert wird. Dieses Neusetzen von $id verändert auch $_SESSION['id']. Ich habe mir dadurch geholfen, dass ich die SESSION-Variable anders benannt habe.

    Ich habe mir dann, um auch ganz sicherzugehen, dass ich hier keinem Phantom nachjage, dies Script hier gemacht:

    PHP-Code:
    <?php

    session_start
    ();
    $_SESSION['test'] = 123;

    $test 456;

    echo 
    'SESSION = ' $_SESSION['test'];

    ?>
    Beim ersten Aufruf wird SESSION = 123 ausgegeben, nach jedem weiteren Aufruf (Aktualisieren mit F5) wird SESSION = 456 ausgegeben.


    So weit so schlecht. Liegt das nun wirklich an register globals = on oder habe ich hier noch mit anderen schlechten Einstellungen zu tun?
    [PHP]if ($var != 0) {
    $var = 0;
    }[/PHP]

  • #2
    *edit*

    Also ja dass liegt an register_globals. Denn da kann nicht unterschieden werden ob $test aus POST/GET/COOKIE/SESSION stammt. Daher gilt es auch für alle. Und genau aus diesem Grund ist register_globals = on schlecht. Außerdem könnte ein User einfach index.php?id=88 aufrufen und dann ist seine UserID 88, so kann er sich bei jedem beliebigen User einloggen und dessen Daten sehen.

    Auch wenn die Variable anders heißt, diese kann man ebenfalls ändern. Hier solltest du beim Kunden drauf bestehen dass er register_globals = off stellt. Alles andere wäre einfach unsinnig.

    Kommentar

    Lädt...
    X