Michael Bieri: POST/GET-Variabeln: Problem...?!?

Hallo Leute

Ich hab da grad ein wirklich sehr seltsames Problem. Also:

Es wird folgende Adresse an den Server gesandt: (natürlich noch das http:// etc. dazu)

forum.php?abstimmungaction=vote&abstimmung=true&abstimmungid=25&id=1&abstimmungnr=4

Wenn ich jetzt auf irgend eines davon zugreifen möchte, mache ich das doch mit $HTTP_GET_VARS["abstimmungid"]. Das geht ja auch. Aber das liebe PHP macht nun auch noch folgendes: abstimmungid steht nun direkt als Variabel $abstimmungsid zur Verfügung. Ist das normal? Habe ich eventuell versehentlich Einstellungen geändert?

Gruss

Michael

  1. Hallo Michael,

    Wenn ich jetzt auf irgend eines davon zugreifen möchte, mache ich das doch mit $HTTP_GET_VARS["abstimmungid"].

    $_GET ist besser, da $HTTP_GET_VARS in ferner Zukunft entfallen soll und $_GET in jeder Funktion verfügbar ist - $HTTP_GET_VARS mußt Du erst mit global importieren. (und Du musst weniger tippen ;-)) Aber $HTTP_GET_VARS kannst Du natürlich auch noch verwenden.

    Aber das liebe PHP macht nun auch noch folgendes: abstimmungid steht nun direkt als Variabel $abstimmungsid zur Verfügung. Ist das normal?

    Leider, ja. Das ist die Einstellung register_globals. (die Du auch ausstellen kannst) Diese ist aber in neueren PHP-Versionen zum Glück standardmäßig deaktiviert. Diese Einstellung bewirkt, dass alles, was in $_ENV, $_GET, $_POST, $_COOKIE, und $_SESSION ist, auch als globale Variable zur Verfügung steht. Das ist natürlich problematisch, weil Benutzer Variablen direkt in PHP injizieren können. Beispiel:

    <?php

    if ($_GET['username'] == 'christian' && $_GET['password'] == 'hallo') {
      $logged_in = 1;
    }

    if ($logged_in) {
      echo 'dürfen nur eingeloggte sehen';
    }

    ?>

    Mal angenommen, jemand startet jetzt das Script mit script.php?logged_in=1 - dann hast Du eine Sicherheitslücke. Daher sollte man möglichst register_globals deaktiveren - _vor allem_ auf Produktionsumgebungen. Einige Ältere Scripte (und leider auch PHP-Tutorials) verlassen sich auf register_globals und funktionieren deswegen nicht ohne, was IMHO verkehrt ist.

    Viele Grüße,
    Christian

    --
    Hast Du einen Beitrag? Nur her damit!
    http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
    SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
    sh:) fo:) ch:] rl:( br:> n4:& ie:% mo:) va:) de:] zu:) fl:( js:| ss:) ls:[
  2. Hallo Michael,

    forum.php?abstimmungaction=vote&abstimmung=true&abstimmungid=25&id=1&abstimmungnr=4
    Wenn ich jetzt auf irgend eines davon zugreifen möchte, mache ich das doch mit $HTTP_GET_VARS["abstimmungid"].

    es kommt darauf an, welche Version du hast, ab Version 4.1 sollte man $_GET['abstimmungsid'] verwenden.

    Das geht ja auch. Aber das liebe PHP macht nun auch noch folgendes: abstimmungid steht nun direkt als Variabel $abstimmungsid zur Verfügung.

    dann steht register_globals auf on (kannst du nachschauen, wenn du die anschaust, was phpinfo() ausgibt) - warum das auf off stehen sollte (und bei neueren Versionen Standardmäßig steht) kannst du im Archiv nachlesen.

    Ist das normal?

    bei älteren Versionen, ja.

    Habe ich eventuell versehentlich Einstellungen geändert?

    unwahrscheinlich (ich weiß nicht, ob du Zugriff auf die php.ini hast)

    Grüße aus Nürnberg
    Tobias

    --
    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
  3. Hallo nochmals

    herzlichen Dank an euch beide, das Problem sollte nun gelöst sein. Mhh...es ist einfach seltsam, dass mier dies zuvor nie auffiel.

    Gruss & herzlichen Dank

    Michael