register_globals=off, wie schreibt man um?

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

  • register_globals=off, wie schreibt man um?

    Hallo. ich hab nen Problem mein Script umzuschreiben.
    Worauf muss man achten und was ändert sich genau durch register_globals = off ??
    ich hab das script hier http://www.stf-hope.de/download_files/lauftext_v.1.zip . Da es aus mehreren dateien besteht hab ich das hir mal gepostet. ich hoffe, das is net schlimm.
    ich hab da schon versucht das passwort, was in einer anderen datei liegt, und die eingabe des users von if($pw == $apwd) mit if($_POST[$pw] == $apwd) umzuschreiben. jedoch macht er da auch nichts.
    mein provider hat die globals mal auf on gestellt und da ging es auch.
    das script is auch net ganz sauber geschrieben.
    So richtig viel ahnung hab ich leider noch nicht von php.
    ich hoffe, mir kann jemand helfen was ich regulär machen muss um das globals=off -fähig zu machen.
    ich hab nirgens was sonst gefunden. nicht mal in den beschi**enen Buch, welches ich für teuer geld gekauft habe...
    ich hoffe mir kann einer helfen... *hoff*

  • #2
    OffTopic:
    @ronsn, ich habe deinen Beitrag geteilt und hierher verschoben, weil das nichts mit Installation & Co. zu tun hat

    Kommentar


    • #3
      PHP-Code:
      if($_POST['pw'] === $apwd) {
          
      //dann dein Code

      Was sich v.a. ändert ist, dass du nicht mehr via $varname auf ein Element (z.B. POST oder GET) direkt zugreifen kannst. Du musst den Umweg machen
      PHP-Code:
      //bei Werten, die mit der POST Methode übermittelt wurden
      $var $_POST['name_des_feldes'];

      //bei GET
      $var $_GET['name_der_var_im_url']; 
      Der wesentliche Unterschied ist, dass du so wissen musst, wie die Daten übertragen wurden ($_GET oder $_POST).
      Den Vorteil siehst du hier.Nehmen wir an du hast ein Login Script und arbeitest mit register_globals on. Nach Prüfung des Benutzernamens wird im Erfolsfall eine var $login mit dem Wert 1 angelegt. Darauf prüfst du weiter unten
      PHP-Code:
      if($login == 1){
          
      //geheime Daten anzeigen
      }
      //wenn ich jetzt reinkommen will ohne den Login zu kennen
      //dann muss ich nur dafür sorgen, dass dein Script
      //eine Var mit Namen login und Wert 1 bekommt 
      //z.B. in der Adresszeile vom Browser --> 
      //www.deine_domain.tld/login.php?login=1 
      Du siehst mit globals on kann man durchaus Vars im ausführenden Script überschreiben.
      Um dieses Problem zu verhindern solltest du folgendes beachten:
      1. register_globals off
      2. Bei jedem if eine Typenprüfung
      3. Initialisiere deine Vars
      Zu (1) siehe oben.

      Zu (2) Jede via URL oder Formular übergebene Var ist vom Typ String. Du hast in "deinem" Loginscript aber einen Integer vom Wert 1 vergeben. Der === - Operator vergleicht im Gegensatz zum == - Operator neben der Wertegleichheit auch die Typengleichheit.
      PHP-Code:
      if($login === 1){ 
      Zu (3) Die globalen Vars werden vor den Vars in deinem Script initialisiert. Wenn du jetzt also folgenden Schnippel nimmst
      PHP-Code:
      //übergib dem Script ne Var script_name.php?login=1
      var_dump$login); // ergibt Typ Str mit Wert 1

      //jetzt initialiseiren wir unsere Var 
      //übergib dem Script wieder ne Var script_name.php?login=1
      var_dump($login// ergibt noch den Wert 1
      $login NULL// Variable initialisieren
      var_dump($login); // ergibt NULL 
      Du siehst die globale Var wird wohl mit dem Wert 1 belegt du überschreibst sie aber wieder bevor dein Script richtig zu arbeiten beginnt.

      Das beste ist wohl alles zu machen, um die Sicherheit deiner Scripts zu erhöhen

      Wenn du noch mehr zum Thema lesen willst, dann google mal mit den ensprechenden Stichworten bei google. Bin sicher du wirst unendlich viel finden, das sich mit dem Thema Sicherheit und globals auseinandersetzt.

      Gruss

      tobi
      Zuletzt geändert von jahlives; 23.12.2005, 11:51.
      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

      Kommentar


      • #4
        Du mußt nicht zwangsläufig den ganzen Code lesen, nachvollziehen und ändern. Es sollte genügen, wenn du folgendes in eine eigene Datei rgoff2on.php schreibst und diese überall wo nötig includierst.
        PHP-Code:
        <?php

        $globls 
        = array(
                
        'E' => 'ENV'
                
        'G' => 'GET'
                
        'P' => 'POST'
                
        'C' => 'COOKIE'
                
        'S' => 'SERVER'
                
        );

        foreach (
        $globls as $name) {
            if (!isset(${
        "_$name"})) {
                ${
        "_$name"} = &${"HTTP_$name_VARS"};
            }
        }

        if (!
        ini_get('register_globals')) {
            
        $vo ini_get('variables_order');
            for (
        $i 0$i strlen($vo); $i++) {
                
        extract(${'_'.$globls[$vo{$i}]});
            }
        }

        ?>
        Achtung: Ungetestet!
        $_FILES (ehem. $HTTP_POST_FILES) habe ich gar nicht beachtet ... und wahrscheinlich einiges mehr auch nicht.

        Kommentar

        Lädt...
        X