Palme: -Neuinstallation: post-Variablen stehen nicht mehr zur Verfügung

Hallo,

ich habe eine etwas neuere Version von PHP (PHP 4.2.0) installiert.
Auf meinen Webseiten(noch nicht im Internet)werden nun die post-Variablen nicht mehr erkannt. Vorher hat das ohne Probleme funktioniert!

Ich bekomme jetzt folgende Fehlermeldung:

Notice: Undefined variable: $xy in c:\home\energieberatung\foerdercheck2.php on line xy

Ich bin allerdings auch umgestiegen vom PWS auf Apache, falls es etwas damit zu tun haben kann!

Weiß jemand mir zu helfen?

Mfg

Palme

  1. Halihallo Palme

    [...]
    register_globals = off
    bei neuen Versionen => Zugriff über $_POST oder $_GET, was auch wesentlich sicherer ist.

    Viele Grüsse

    Philipp

    1. register_globals = off
      bei neuen Versionen => Zugriff über $_POST oder $_GET, was auch wesentlich sicherer ist.

      Hallo,

      register_globals in meiner php.ini ist = off, man soll (lt. Doku in der php.ini) auch auf =on  verzichten.

      Aber, beim Zugriff über $_POST, wie muss ich nun vorgehen, damit diese Formularvariablen in solche einer Abfrage zur Verfügugn stehen:

      if($xy == 'Nein')
         { include ("./xy.php"); }

      Mfg

      Palme

      1. Hallo ihr da draußen,

        Aber, beim Zugriff über $_POST, wie muss ich nun vorgehen, damit diese Formularvariablen in solche einer Abfrage zur Verfügugn stehen:

        if($xy == 'Nein')
           { include ("./xy.php"); }

        if($_POST['xy'] == 'Nein')
           { include("./xy.php"); }

        Grüße von hier drinnen, aus Biberach an der Riss (http://www.stadt-biberach.de),
        Dogfish

        --
        Let's close our eyes and see what happens
        (http://dogfish.net.tc / http://dogfishus.net.tc)
      2. Hi,

        machst du:

        $xy = $_POST["xy"];
         if($xy == 'Nein')
            { include ("./xy.php"); }

        Bjoern

        1. Hallo,

          Vielen Dank an euch alle!

          Es klappt jetzt, auch wenn es etwas mehr Schreibarbeit ist als vorher, macht aber nichts.

          Aber, warum ist diese Variante eigentlich sicherer, bzw. was ist an der direkten Verwendung der post-Variablen so unsicher?

          Mfg

          Palme

          1. Hi Palme,

            Aber, warum ist diese Variante eigentlich sicherer, bzw. was ist an der direkten Verwendung der post-Variablen so unsicher?

            Bisher war es so:
            Du hast ein Formularfeld mit Name="vorname", das Feld wurde beim Senden an z.Bsp. action="formular.php" übergeben und war da als $vorname verfügbar. Es konnte aber nicht sichergestellt werden das es sich bei dem Wert auch wirklich um die Variable aus dem Formular handelt, wenn jemand den entsprechenden Feldnamen herausfindet kann der auch einen beliebigen Wert übergeben, das kann bei u.U. ganze Datenbanken löschen etc.

            Jetzt ist es so:
            PHP weiss nun in einen solchen Fall, das der Wert von Name nur unter der PHP-internen Variablen $_POST["Name"] gespeichert sein darf. Das stellt sicher dass es sich auch um den gesendeten Wert handelt.

            Ich hoffe Du kannst was damit anfangen und ich hoffe auch das meine Erklärung einigermassen richtig war. Falls es jemand besser weiss lasse ich mich gerne berichtigen.

            Gruss AndreD

          2. Moin,

            Aber, warum ist diese Variante eigentlich sicherer, bzw. was ist an der direkten Verwendung der post-Variablen so unsicher?

            Nichts. Es gibt aber leider genügend unbedarfte Personen auf dieser Welt die mal eben so ein PHP-Skript hinkritzeln und sich nicht den Hauch einer Spur darum kümmern, ob sie ihre Variablen richtig initialisieren, bzw. ob auch nichts was so in einer Variable auftauchen kann irgendeinen schädlichen Effekt hat.

            Das Abschalten von register_globals soll also lediglich verhindern dass du dir aus Unwissenheit in den Fuß schießt. Naja, und es macht einen etwas saubereren Eindruck.

            Eine wirkliche Sicherheitsgefahr geht von register_globals = On bei nicht-hirntoter Programmierung jedenfalls nicht aus.

            Beispiele für hirntote Programmierung (aus der Kategorie "Bitte nicht nachmachen"):

            // Wir löschen mal die Dateien datei1 bis datein
            for($i=1; $i < $n; $i++)
             $zuloeschen .= " datei$i ";
            system("rm ".$zuloeschen);

            // Zugangsberechtigung prüfen
            if($passwort == "geheim")
             $berechtigt = true;
            //...mehr Code
            if($berechtigt)
             tuwas();

            --
            Henryk Plötz
            Grüße von der Ostsee
            1. Moin!

              Das Abschalten von register_globals soll also lediglich verhindern dass du dir aus Unwissenheit in den Fuß schießt. Naja, und es macht einen etwas saubereren Eindruck.

              Eine wirkliche Sicherheitsgefahr geht von register_globals = On bei nicht-hirntoter Programmierung jedenfalls nicht aus.

              Naja, es verhindert effektiv, dass der Angreifer beliebige globale Variablen initialisieren kann. Also geht schon eine potentielle Gefahr von register_globals=on aus, die man ganz einfach umgehen kann - nur muß der Provider das eben auch tun. Wenn der aus Kompatibilitätsgründen das nicht abgeschaltet hat, bringt ein Zugriff auf $_POST & Co. leider nicht wirklich etwas.

              Beispiele für hirntote Programmierung (aus der Kategorie "Bitte nicht nachmachen"):

              ...gibts genug in real existierendem Code. Und das sind nicht zwingend immer nur Schnell-Produkte hirntoter Programmierer, sondern eben leider auch Software, die gerne und weit verbreitet eingesetzt wird. Ohne Gewähr auf Richtigkeit: Irgendwelche Versionen von PHP-Boards oder PHP-Nukes hatten solche Programmlücken auch eingebaut, mit denen der Angreifer dann Code von externen Servern einbinden konnte.

              Im Prinzip hast du aber natürlich Recht: Da nicht ausgeschlossen werden kann, dass der PHP-Code nicht auch auf Servern mit register_globals=on ausgeführt werden könnte, sollte man sich schon der Gefahr bewußt sein und entsprechend programmieren.

              - Sven Rautenberg

              --
              Signatur oder nicht Signatur - das ist hier die Frage!
  2. Hallo,

    ich habe eine etwas neuere Version von PHP (PHP 4.2.0) installiert.
    Auf meinen Webseiten(noch nicht im Internet)werden nun die post-Variablen nicht mehr erkannt. Vorher hat das ohne Probleme funktioniert!

    Ich bekomme jetzt folgende Fehlermeldung:

    Notice: Undefined variable: $xy in c:\home\energieberatung\foerdercheck2.php on line xy

    Hallo,

    Nur so als Idee:
    Vielleicht sind in der neuen PHP-Installation die Globals auf OFF.
    Das könntest du in deiner php.ini ändern.
    Oder besser du liest die Variablen mit ' $xy = $_POST["xy"]; ' ein. Wenn du also eine Variable an eine andere übergibst, liest du die dort zu Beginn ein und kannst sie dann wie gewohnt verwenden.

    Gruss,
     Bjoern