Marc: Register_globals Problem

Hallo miteinander,

habe eine kleine Frage. Hab in meinem PHP die register_globals auf OFF gestellt. Nun möchte ich jedoch an Daten rankommen, die an der URL hängen. Wie greife ich drauf zu?

Bsp: index.php?op=xyz

Wie komm ich jetzt an das $op ?

Thanx

Marc

  1. Hi

    habe eine kleine Frage. Hab in meinem PHP die register_globals auf OFF gestellt. Nun möchte ich jedoch an Daten rankommen, die an der URL hängen. Wie greife ich drauf zu?

    Bsp: index.php?op=xyz

    Wie komm ich jetzt an das $op ?

    Indem du die entsprechenden Umgebungsvariablen ausliest. In deinem Falle also das superglobale Array $_GET;

    Mache dich mit dem Konzept vertraut und du wirst sehen, das ganze stellt garkein Problem dar, sondern erleichtert nicht nur die Sache, sondern auch das Absichern der Scripte.

    Grüße aus Barsinghausen,
    Fabian

    1. Ich schließe mich da an, es wurde ein großer Schritt für die Sicherheit getan und das System ist nur unwesentlich umständlicher.
      Alle Daten aus URLs sind mit $x = $_GET['x'] verfügbar, was aus POST-Formularen stammt analog mit $_POST['x'];

      Wenn dir das zu umständlich ist die auszulesen, dann schreib dir halt eine kleine Funktion getParameter und lass sie der Reihe nach die Arrays durchlaufen bis die Variable gefunden wird.

      Rouven

      1. Hi Rouven,

        Wenn dir das zu umständlich ist die auszulesen, dann schreib dir halt eine kleine Funktion getParameter und lass sie der Reihe nach die Arrays durchlaufen bis die Variable gefunden wird.

        Du meine Güte, genau _das_ soll damit verhindert werden. Der Programmierer kennt als einziger seine Variablen, also wird er ja wohl in der Lage sein, gezielt $_FOO['BAR'] auszulesen.

        Naja, PHP bleibt halt die Sprache für n00bs, und die werden es nie lernen (den wenn sie es täten wären sie ja keine mehr) *seufz*

        Grüße aus Barsinghausen,
        Fabian

        1. Hi nochmal,

          ok das läuft soweit. Nun hätte ich dazu noch eine kleine technische Frage:

          Vorher hatte ich ne Variable $jahr. Wenn ich über dir URL ?jahr=2003 angehängt habe, hat er das in die Variable übernommen. Wenn an die URL nichts angehängt war habe ich einfach das aktuelel Datum in die Variable übergeben.

          sprich:

          if (!isset($jahr)) { $jahr=date("Y"); }

          Nun muss ich ja mit $_GET[jahr] arbeiten. Soll ich dann die GET Variable einfach überschreiben? Sprich:

          if (!isset($_GET[jahr)) { $_GET[jahr]=date("Y"); }

          Oder gibts da ne andere, bessere Möglichkeit? Oder ist das egal?

          1. Hi nochmal,

            Hallo

            Vorher hatte ich ne Variable $jahr. Wenn ich über dir URL ?jahr=2003 angehängt habe, hat er das in die Variable übernommen. Wenn an die URL nichts angehängt war habe ich einfach das aktuelel Datum in die Variable übergeben.

            sprich:

            if (!isset($jahr)) { $jahr=date("Y"); }

            Nun muss ich ja mit $_GET[jahr] arbeiten. Soll ich dann die GET Variable einfach überschreiben? Sprich:

            if (!isset($_GET[jahr)) { $_GET[jahr]=date("Y"); }

            Oder gibts da ne andere, bessere Möglichkeit? Oder ist das egal?

            Schreib einfach folgendes:
            $jahr = $_GET['jahr'];
            if (!isset($jahr)) { $jahr=date("Y"); }
            ...

            Philip

        2. Hi Rouven,

          Wenn dir das zu umständlich ist die auszulesen, dann schreib dir halt eine kleine Funktion getParameter und lass sie der Reihe nach die Arrays durchlaufen bis die Variable gefunden wird.

          Du meine Güte, genau _das_ soll damit verhindert werden. Der Programmierer kennt als einziger seine Variablen, also wird er ja wohl in der Lage sein, gezielt $_FOO['BAR'] auszulesen.

          Hi !

          Hmpf,
          darüber kann man jetzt sicherlich diskutieren, ich gebe auch zu, dass ich in der Form noch nicht darüber nachgedacht habe, dass man damit jetzt andere Variablen in das Skript reinbringen könnte, aber mein Verständnis war so: Man will mit register_globals verhindern, dass interne Variablen (denn alle anderen kann ich ja sowieso manipulieren!) vor einem externen Zugriff geschützt werden. Der daraus resultierende Gedanke ist der:
          Anstatt am Anfang des Skriptes folgendes zu machen:
          $lokalx = $_GET['urlx'];
          nehme ich mir eine Funktion
          $lokalx = getParameter("urlx");

          Ich sehe da zunächst mal noch kein Problem und es ermöglicht mir Skripte sowohl mit GET als auch mit POST anzusprechen, weil sich die Verzweigung 'wenn nicht da, dann vielleicht dort' dann zentral in der getParameter befindet und nicht bei jeder Variable aufs neue.
          Also, mir geht es nur um das abholen der Variablen...

          Rouven

          1. Hallo,

            Was spricht denn dagegen gleich $GLOBALS statt $GET oder $POST zu nehmen ? Da sind doch auch beide drin.

            Gruss

            Marko

            1. Hallo Marko,

              Was spricht denn dagegen gleich $GLOBALS statt $GET oder $POST zu nehmen ? Da sind doch auch beide drin.

              Nein, denn in $GLOBALS stehts nur drinnen, wenn register_globals an ist. Und genau das ist hier nicht der Fall.

              Viele Grüße,
              Christian

              1. Hallo Christian,

                Aua, also manchmal, Du hast recht, ich hatte das irgendwo mal so gelesen, oder falsch verstanden und nie selbst überprüft. Gestolpert bin ich nicht drüber, da Register_Globals bei mir bisher immer on ist (Kompatibilität zu alten Scripten), ich schreibe da seit einem Jahr Bullshit in jedes Script *aufstirnklatsch*

                Gruss

                Marko

                1. Hallo Marko,

                  ich schreibe da seit einem Jahr Bullshit in jedes Script *aufstirnklatsch*

                  Sieh's positiv: Besser Du weißt es jetzt, als dass Du die schmerzhafte Erfahrung machst, dass es dann auf einem Produktionssystem nicht mehr funktioniert.

                  Viele Grüße,
                  Christian

          2. Hallo Rouven,

            Ich sehe da zunächst mal noch kein Problem und es ermöglicht mir Skripte sowohl mit GET als auch mit POST anzusprechen, weil sich die Verzweigung 'wenn nicht da, dann vielleicht dort' dann zentral in der getParameter befindet und nicht bei jeder Variable aufs neue.
            Also, mir geht es nur um das abholen der Variablen...

            Warum nicht $_REQUEST? $_REQUEST ist sozusagen $_GET + $_POST + $_COOKIE.

            Viele Grüße,
            Christian

            1. Hi,

              Was dagegen spricht? Ich habe zwar mittlerweile mehrere 10K Zeilen PHP-Code produziert/co-produziert, das Array kannte ich aber bisher leider nicht... :-(

              Rouven

              1. Hallo Rouven,

                Was dagegen spricht? Ich habe zwar mittlerweile mehrere 10K Zeilen PHP-Code produziert/co-produziert, das Array kannte ich aber bisher leider nicht... :-(

                Naja, Du kannst ja zumindest Deine Funktion effizienter schreiben, dass sie einfach $_REQUEST[$name] zurückliefern soll. Und für die Zukunft weißt Du es ja...

                Viele Grüße,
                Christian

        3. Moin

          Naja, PHP bleibt halt die Sprache für n00bs, und die werden es nie lernen (den wenn sie es täten wären sie ja keine mehr) *seufz*

          Tausend Dank.

          Manchmal laesst Du eine dermassige Arroganz raus, dass es nicht mehr feierlich ist. Muss das unbedingt sein?

          --
          Gruesse
          Wilhelm