Tom1tk: globals auf "off" schalten

Hey ho, guten Morgen,

gestern Abend haben wir hier 8unter anderem)
[pref:t=69885&m=402326]
die Notwendigkeit der $_SESSION diskutiert.

Wie kann ich meine globals auf off schalten, damit diese Umbau-Aktion auf $_SESSION Sinn macht? Ich habe keinen Zugriff auf php.ini, da ich nur kleinern webspace-Kunde bin...
Geht das über ne htaccess? Oder lege ich nur ne zusätzliche php.ini in den gewünschten Ordner? Hat das Auswirkungen auf andere Ordner?

Thanx
Tom1tk

  1. Hey ho, guten Morgen,

    gestern Abend haben wir hier 8unter anderem)
    [pref:t=69885&m=402326]
    die Notwendigkeit der $_SESSION diskutiert.

    Wie kann ich meine globals auf off schalten, damit diese Umbau-Aktion auf $_SESSION Sinn macht?

    Diese Umbauaktion macht immer Sinn unabhängig davon ob register_globals  /on /off ist.
    Das Du dies hier so schreibst deutet eigentlich darauf hin, dass Du den Sinn der Sache noch nicht so richtig verstanden hast?

    Ich habe keinen Zugriff auf php.ini, da ich nur kleinern webspace-Kunde bin...

    Geht das über ne htaccess? Oder lege ich nur ne zusätzliche php.ini in den gewünschten Ordner? Hat das Auswirkungen auf andere Ordner?

    Hier findest Du die Möglichkeiten die Du hast es einzustellen:
    http://de.php.net/manual/de/function.ini-set.php
    Danach dürfte die Einstellung in der.htaccess möglich sein.
    Vorrausgestzt Dein Provider erlaubt es...
    Die meisten erlauben es nicht.

    Dann wist Du wohl damit leben müßen.

    TomIRL

    1. Hi TomIRL,

      kann man, wenn globals auf on steht, auf die Vars $_SESSION von aussen nicht eingreifen, oder schon? Ist Die Var $_SESSION also "überschreibbar" oder nicht? Sonst macht die ganze Sachen mit dem Umbau wirklich keinen Sinn. Ich glaube, dass mein Provider das Abschalten nicht zulässt. Wie könnte ich dann mein Web einigermaßen sicher gestalten?
      Nur auf Vars über $_GET["Blabla"] zugreifen? Was ist dann, wenn jemand doch genau meinen Variablen-Namen in den QueryString reinschreibt?

      Vielleicht ist jemand so freundlich und erläutert mir diese Sache mal. Auch, warum globals auf off noch wichtig ist (Das mit den Vars überschreiben ist mir bewußt. Drum heißen meine Vars auch nicht $pwasswort sondern z.B. $pakumne1289)

      Greets und Thanx
      Tom1tk

      1. Hello,

        du startest einen Request und gibst Parameter mit, agen wir mal per GET.

        Im Script hast Du z.B eine schlampig durchgeführte Sequenz, da PHP das ja ao erlaubt:

        <?php   ### Globals sind an -> globals.php ###

        $string .= "und noch ein Fehler";
        echo $string;

        ?>

        Das lad  nun mal auf Deinen Server und ruf das Script auf

        .../globals.php

        und mit

        .../globals.php?string="Du blödes Arschloch, "

        entschuldige den rüden Ton, er soll klarmachen, wie böse Menschen sein können.

        Die internen Vars sind also von außen belegbar, obwohl das gar nicht so vorgesehen war. Wenn man alos die implizite Deklaration von PHP verwendet, dann kann man sich locker Fehler einfangen. Wenn dann auch noch magic_quotes_gpc ausgeschaltet ist, sind der Fernsteuerung Deines Scriptes eventuell Tür und Scheunentor geöffnet.

        Mit irgendwelchen sicheren Variablen muss ein Script aber arbeiten. Da bleibt dann nur das Initialisieren vor der ersten Benutztung, so wie man das früher auch gemacht hat *gg*

        Wenn jetzt Deine Variablen per default (Globals = off) nur noch in den Arrays landen, weiß man erstens, auf welchem Wege sie dem Script angetragen wurden und man hat eine höhere Sicherheit wegen der scripteigenen Variablen. Die gehören dann wirklich dem Script alleine. Initialisiern lass ich mich trotzdem nicht nehmen. Bin halt schon uHu.

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        1. Hi Tom,

          OK. Das war/ist mir klar.
          Aber wie schalte ich die Globals auf off?????? Mir braingt die ganze Umbauaktion doch nix, wenn man dennoch von aussen drauf zugreifen kann.
          Folgender Eintrag in die htaccess gibt mir nen 500er-Error aus!

          php_value register_globals 0

          Falsch geschrieben? Oder wie sollte das richtig gehen? Habe gerade gegoogled. Das find ich nicht wirklich das richtige (ausser dem oberen).

          Thanx Tom1tk

          Grüße nach http://www.braunschweig.de

          1. Hello Tom,

            Folgender Eintrag in die htaccess gibt mir nen 500er-Error aus!

            php_value register_globals 0

            Falsch geschrieben? Oder wie sollte das richtig gehen? Habe gerade gegoogled. Das find ich nicht wirklich das richtige (ausser dem oberen).

            Das ist wirklich traurig. Ich seh da keinen Syntax-Fehler.
            Und 500 ist ein "internal Server Error" der auf mangelnde Rechte

            fehlendes:
              AllowOverride All

            oder so ähnlich

            schließen lässt. Da wirst Du nix anderes machen können, als den Provider zu wechseln. Was zahlst Du denn bei Deinem und was bekommst Du dafür?

            Liebe Grüße aus http://www.braunschweig.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            1. Hi Tom,

              nicht schlagen. Bin mit meinen Provider sehr zufrieden. Werde mir aber demnächst nen eigenen Server kaufen (also nen Server mit root-Rechten und 40GB).
              Dann hab ich keinen Stress mehr.

              Macht es dann überhaupt Sinn alle Vars umzuschreiben?

              Greets Tom1tk

              1. Hello Tom,

                nicht schlagen. Bin mit meinen Provider sehr zufrieden. Werde mir aber demnächst nen eigenen Server kaufen (also nen Server mit root-Rechten und 40GB).

                Kaufen oder mieten?
                40GB sind ganz schön viel. Ich habe auf dem "heißen" man gerade 750MB, die ich dann 5GB-weise erweitern kann. das reicht.
                Was kostet das denn bei Deinem Provider. Wo bist Du? Was kostet der Traffic?

                Dann hab ich keinen Stress mehr.

                Naja, dann hast Du neuen Stress. Spamfilter fürs Postoffice z.B. Muss ich auch noch ran. Ich krieg inzwischen fast 100 Spam-mails am Tag. Das nervt.

                Macht es dann überhaupt Sinn alle Vars umzuschreiben?

                Es _hat_ zumindest Sinn. Denn irgendwann musst Du die Vars doch mal trennen in der Herkunft, wenn Du zwischen GET, POST und COOKIE unterscheiden willst.

                Liebe Grüße aus http://www.braunschweig.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                1. Hi Tom,

                  Kaufen oder mieten?

                  Mieten. Warte auf günstige Gelegenheit (29EUR/40GB/75GBTransfer)

                  Was kostet das denn bei Deinem Provider. Wo bist Du? Was kostet der Traffic?

                  Ich habe 250MB bei 1und1 für 12.99EUR, Traffik 15GB incl.

                  Nicht schlagen, aber ich bin sehr zufrieden. Sehr schnelle Anbindung, sehr gute Admin-Oberfläche... Ist zwar rel. teuer, aber gut.

                  Greets Tom1tk

                  1. Hello,

                    Mieten. Warte auf günstige Gelegenheit (29EUR/40GB/75GBTransfer)

                    Was kostet das denn bei Deinem Provider. Wo bist Du? Was kostet der Traffic?

                    Ich habe 250MB bei 1und1 für 12.99EUR, Traffik 15GB incl.

                    Nicht schlagen, aber ich bin sehr zufrieden. Sehr schnelle Anbindung, sehr gute Admin-Oberfläche... Ist zwar rel. teuer, aber gut.

                    Warum schlagen? Warum man nun einen Provider gut findet, mus man ja selber wissen. Du weißt ja, dass ich immer gerne http://www.terions.de empfehle. Da bekommt man einen vServer z.Zt. noch für 15Euro im Monat incl. 750MB Space und 50GByte Traffic. Interessant ist immer, was es bei Überschreitung der Grenzen kostet und da sind die Jungs auch sehr fair.

                    1&1 hat da mal fast das zehnfache genommen. Was sie jetzt nehmen fürs GByte weiß ich allerdings nicht.

                    Liebe Grüße aus http://www.braunschweig.de

                    Tom

                    --
                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                    1. Hi Tom,

                      1&1 hat da mal fast das zehnfache genommen. Was sie jetzt nehmen fürs GByte weiß ich allerdings nicht.

                      1,5Cent fürs MB (nicht GB!) Da komme ich aber nie hin.... Meine Seite wird nicht so extrem besucht.

                      Nochmal zurück zum eigentlichen Thema:

                      Kann man von aussen via GET auf die Var $_SESSION zugreifen bzw. Werte überschreiben?

                      Sonst mach ich es eben so (dass es sicherer wird):

                      <?php

                      $Var="";
                      $Var=$_GET["Var"];

                      #Und alle sonst verwendeten Vars initialisieren:

                      $Var1="";
                      $Var2="";
                      $VAR3="";

                      ?>

                      Ist das sicher genug?

                      Greets Tom1tk

                      1. Hello,

                        1&1 hat da mal fast das zehnfache genommen. Was sie jetzt nehmen fürs GByte weiß ich allerdings nicht.

                        1,5Cent fürs MB (nicht GB!) Da komme ich aber nie hin.... Meine Seite wird nicht so extrem besucht.

                        Dann nehmen sie immer noch 10mal soviel, wie ich momentan bezahle.

                        Nochmal zurück zum eigentlichen Thema:

                        Kann man von aussen via GET auf die Var $_SESSION zugreifen bzw. Werte überschreiben?

                        Auf $_SESSION nicht. dafür ist das Array ja da. Und da liegt ja auch der eigentliche Sicherheitsgewinn der Bereichstrennung. Session-Variablen landen nicht mehr in den einfachen Vars, wo sie durch ?var=neuerWert überschreiben werden könnten...

                        Das hing früher praktisch nur von der Wiederherstellungsreihenfolge ab:

                        variables_order EGPCS EGPCS

                        heißt: Lade in der Reihenfolge:

                        • Environment
                        • Get
                        • Post
                        • Cookie
                        • Session

                        variables_order string
                        Gibt die Reihenfolge der EGPCS-Variablen (Environment/Umgebung, GET, POST, Cookie, Server) beim Parsen an. Der Standardwert ist "EGPCS". Setzen Sie z.B. diese Option auf "GP", so wird PHP alle Umgebungs-, Cookie- und Server-Variablen ignorieren, außerdem werden alle GET-Variablen mit POST-Variablen überschrieben, wenn sie den gleichen Namen haben.

                        http://de.php.net/manual/de/configuration.directives.php

                        Wenn man die Sessionvars VOR den $GET wiedrgeholt hat, dann jonnte man das Passwort des Servers besser gelich im Fernsehen ansagen lassen.

                        Jetzt landen die Sessionvariablen garantiert in $_SESSION und Du kannst ja mal versuchen, das von Außen zu überschreiben. Gibt nen ganz witzigen Effect:

                        http://maschine.domain.tld/script.php?_SESSION=hallo

                        Liebe Grüße aus http://www.braunschweig.de

                        Tom

                        --
                        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                        1. Hello,

                          Jetzt landen die Sessionvariablen garantiert in $_SESSION und Du kannst ja mal versuchen, das von Außen zu überschreiben. Gibt nen ganz witzigen Effect:

                          Aufruf durch:
                          Aber bitte VORHER auf einen Zettel schreiben, was wohl passiert *gg*

                          http://maschine.domain.tld/showvars.php?_SESSION=hallo

                          ----------------------------------------------------
                          <?php  ### showvars.php ###

                          session_start();  # wahlweise einschalten.

                          $_varlist = get_defined_vars();

                          echo "<pre>";
                          print_r($_varlist);
                          echo "</pre>";
                          ?>
                          -----------------------------------------------------

                          Liebe Grüße aus http://www.braunschweig.de

                          Tom

                          --
                          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                          1. Hi Tom,

                            dat gibt bei mir beides mal meine Server-Vars aus, einmal mit _Session, einmal ohne.
                            _SESSION=Hallo ist aber jedes Mal in den _GET-Vars drin.
                            Lustiger Effekt? Seh ich nicht.

                            Greets Tom

                            1. Hello,

                              dat gibt bei mir beides mal meine Server-Vars aus, einmal mit _Session, einmal ohne.
                              _SESSION=Hallo ist aber jedes Mal in den _GET-Vars drin.
                              Lustiger Effekt? Seh ich nicht.

                              Na, das ist doch lustig. NICHT lustig wäre es, wenn man so ein $_SESSION anlegen könnte von außen.

                              Und? Hast Du vorher überlegt, was wohl rauskommt?

                              Liebe Grüße aus http://www.braunschweig.de

                              Tom

                              --
                              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                              1. Hallo Tom

                                Na, das ist doch lustig. NICHT lustig wäre es, wenn man so ein $_SESSION anlegen könnte von außen.

                                Und? Hast Du vorher überlegt, was wohl rauskommt?

                                Eh klar. Aber ich hatte (laut euren vorhergehenden Tipps) eben dieses erwartet.

                                Greets Tom1tk

                        2. Jo, das hab ich grad schon versucht, aber hat keinen Effekt ausgegeben...

                          Drum fragte ich auch, ob man die überschreiben kann.

                          750MB sind für übrigen auch zu wenig. Ich hätte gerne 5GB. Das wäre (glaub ich) gerade richtig, da ich sehr große Fotogalerien veröffentlichen will (nur für angemeldete User). Du hattest mir mal den Tip mit der "Bildschleuse" gegeben. Jetzt hab ich das Problem, dass ich all diese Bilder via Bildschleuse veröffentlichen muss. Geht das auch anders, dass aber trotzdem nur eingeloggte User die Bilder betrachten können. (htaccess-Login will ich nicht!). Ich hab jetzt schon via htaccess meinen Server so hingebogen, dass die Bilder nur rausgeghen, wenn die Anfrage von meinen Domains kommt.

                          Ideen? Das wäre doch was neues für php5, also nen Verzeichnisschutz mit php, der über irgend ne session-Var "aufmachbar" wäre.

                          Greets Tom1tk

    2. Nochmals ich,

      habe mit

      ini_set("register_globals","0")

      das Dingens ausgeschaltet. Ist das jetzt für "immer" aus, auch wenn ich ne andere Seite aufrufe, oder muss ich diese Funktion auf allen Seiten mit einbinden.

      In der phpinfo() steht:

      register_globals: Local=OFF Master=on

      Greets Tom1tk

      1. Hello,

        habe mit

        ini_set("register_globals","0")

        das Dingens ausgeschaltet. Ist das jetzt für "immer" aus, auch wenn ich ne andere Seite aufrufe, oder muss ich diese Funktion auf allen Seiten mit einbinden.

        Das ist dann nur für das Script aus. Aber IM Script ist das zu spät. Da sind die Variablen dann ggf. schon generiert. Kann man doch ganz einfach testen, indem man einen GET-Parameter mit übergibt und nach dem ini_set() mal mit isset($paramname) nachfragt, ob der doch da ist. Bei $_GET[$paramname] MUSS er da sein und wahrscheinlich wir er auch in $HTTP_GET_VARS[$paramname] vorhanden sein.

        Letzteres kann man erst ab PHP 4.ganzhoch oder 5.x vermeiden. Schrieb ich aber schon.

        Du musst es in der .htaccess oder in der Conf für den Virtuellen Host ausschalten. Da ist es auch sichererer, weil man es nicht vergessen kann.

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        1. Hi Tom,

          Du musst es in der .htaccess oder in der Conf für den Virtuellen Host ausschalten. Da ist es auch sichererer, weil man es nicht vergessen kann.

          Ja, aber wie? Bei php.net finde ich nur die Möglichkeit es in dem Script selbst zu deaktivieren!

          Greets Tom1tk

    3. Nochmal ich....

      Kann das sein, dass die Seite erheblich schneller wird bei globals=off?

      Bitte nicht schimpfen. Ich lerne das erst grad. Jeden Tag ein bischen mehr...

      Danke für Eure Hilfe!

      Tom1tk

      1. Hello,

        Kann das sein, dass die Seite erheblich schneller wird bei globals=off?

        Bitte nicht schimpfen. Ich lerne das erst grad. Jeden Tag ein bischen mehr...

        Erheblich nicht, aber schneller bestimmt. Je nach Anzahl der Parameter müssen ja soviele Einträge weniger in der Variablentabelle erzeugt werden.

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
  2. Hey ho, guten Morgen,

    Moin!

    Wie kann ich meine globals auf off schalten, damit diese Umbau-Aktion auf $_SESSION Sinn macht? Ich habe keinen Zugriff auf php.ini, da ich nur kleinern webspace-Kunde bin..

    Tja. Das ist so eine Sache... Also ich mußte vor einiger Zeit Scripte zum laufen bringen, die für register_globals=off gewschrieben waren.
    Die Scripte mußte ich fast sofort zum Laufen bringen und es waren recht viele und lange Scripte. Was also tun? Ich konnte nicht jede einzelne Variable prüfen und dann ggf. abändern. Was also tun?
    Mit Hilfe eines kleinen Scriptes kann man das recht schnell regeln, auch wenn ich das für mich nur als Notlösung ansehe.
    Man sollte hier abwegen, ob diese Lösung für einen wirklich in Frage kommt. Sinnvoller ist es sicher immer, wenn man das mit register_globals=on arbeitet. So hat man dann die Kontrolle darüber, wo welche Variablen herkommen.

    Aber wie auch immer: vielleicht hilft Dir dieses Script ja weiter...

    Schöner Gruß, rob

    <?php

    $array_reg = array_merge( $_GET, $_POST, $_SESSION, $_COOKIE, $_SERVER, $_ENV );

    foreach ( $array_reg as $key => $value )
    {
        if ( is_array( $value ) )
        {
            foreach ( $value as $key_2 => $value_2 )
            {
                $$key_2 = $value_2;
            }
        }
        else
        {
            $$key = $value;
        }
    }
    ?>

    1. habe d'ehre

      Sinnvoller ist es sicher immer, wenn man das mit register_globals=on arbeitet. So hat man dann die Kontrolle darüber, wo welche Variablen herkommen.

      Bist Du Dir wirklich sicher, dass Du diese Aussage so stehen lassen willst. ;-)

      carpe diem
      Wilhelm

      1. Bist Du Dir wirklich sicher, dass Du diese Aussage so stehen lassen willst. ;-)

        Oops. Darfst mich hauen. Natürlich ein Tippfehler. Es muß natürlich off heissen, sonst weiß man ja eben nicht, wo die Variablen herkommen...

    2. Tach auch,

      ALARM!!!!!

      Wir arbeiten gerade an der anderen Lösung. Ich will weg von den globals=on, da dies eine erhebliche Sicherheitslücke darstellt.

      Lies mal alle Threads durch!

      Greets Tom1tk

    3. Hello,

      Aber wie auch immer: vielleicht hilft Dir dieses Script ja weiter...

      <?php

      $array_reg = array_merge( $_GET, $_POST, $_SESSION, $_COOKIE, $_SERVER, $_ENV );

      foreach ( $array_reg as $key => $value )
      {
          if ( is_array( $value ) )
          {
              foreach ( $value as $key_2 => $value_2 )
              {
                  $$key_2 = $value_2;
              }
          }
          else
          {
              $$key = $value;
          }
      }
      ?>

      Vielleicht hilf da ja auch
      http://de3.php.net/manual/de/function.extract.php

      extract ($_GET);
      extract ($_POST);
      ...

      Liebe Grüße aus http://www.braunschweig.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen