MoniquE: Übergabe Variabeln: Eure Meinung

Hallo

Ich habe meinen Hoster gewechselt. Nun habe ich festgestellt, dass ich die Übergabe von Variabeln (zumindest in Links) anders handhaben muss. Und zwar muss ich neu im Header folgenden Code einbauen:

<?
$var=$_GET["var"];
?>

Nur so kann ich die Variabeln im Code verwenden. Bis anhin ging es ohne!

Meine Fragen:

  • Ist das mit dem zusätzlichen Code im Header sauberer programmiert?
  • Kann ich dies umgehen?

Ich wäre um Eure Meinung sehr dankbar. Ich habe echt keinen Bock all meine Scripts umprogrammieren zu müssen.

Schönen Sonntag noch und viele Grüsse
MoniquE

  1. Hallo,

    Hallo
    <?
    $var=$_GET["var"];
    ?>

    Nur so kann ich die Variabeln im Code verwenden. Bis anhin ging es ohne!

    Das Stichwort heißt register_globals und ist eine Einstellung in der php.ini.

    Allerdings soll diese Möglichkeit in zukünftigen PHP-Versionen meines Wisses nach entfallen. Hintergrund sind Sicherheitsprobleme mit register_globals. So wäre mit register_globals einem Angreifer z.B. möglich, Variablen, die du intern in deinem Skript verwendet, einfach mit neuen Werten zu belegen.

    Für übergebene Variablen (GET und POST) solltest du ausschließlich die superglobalen Arrays $_GET und $_POST verwenden.

    Meine Fragen:

    • Ist das mit dem zusätzlichen Code im Header sauberer programmiert?

    Nicht wirklich. Man kann es machen, um sich die Arbeit ein wenig zu erleichtern. Ich hoffe aber sehr, dass du alle Variablen, die von außen in dein Skript kommen, noch auf Gültigkeit überprüfst (Stichwort Cross Scripting, Code Injection, SQL Injection). Z.B. solltest du bei Variablen, für die nur numerische Werte erwartet werden, dass auch überprüfen (is_numeric()).

    • Kann ich dies umgehen?

    Wie oben bereits angedeutet: Ja, im Moment noch. Aber du solltest nicht.

    Ich wäre um Eure Meinung sehr dankbar. Ich habe echt keinen Bock all meine Scripts umprogrammieren zu müssen.

    Das solltest du aber tun.

    Gruß

    Stareagle

    1. Hallo Stareagle

      Vielen Dank für Deine Ausführungen! Werde wohl in den sauren Apfel beissen müssen!

      Liebe Grüsse
      MoniquE

    2. Und wie verhält es sich in Formularen?

      Verwende den POST: <FORM action="test.php" method=post>

      Auch wenn ich folgenden Code im Header habe:
      <?
      $var=$_GET["var"];
      ?>

      Kriege ich den Wert der Variabeln nicht übermittelt???

      1. Hallo,

        Und wie verhält es sich in Formularen?
        Verwende den POST: <FORM action="test.php" method=post>

        dann schreibe bitte auch die Attributwerte in Anführungszeichen. HTML ist gnädig und akzeptiert's auch ohne, sauber ist es aber nicht.

        Auch wenn ich folgenden Code im Header habe:
        <?
        $var=$_GET["var"];
        ?>

        Kriege ich den Wert der Variabeln nicht übermittelt???

        Doch, aber in diesem Falle natürlich im Array $_POST[], da die Daten mit der POST-Methode übermittelt werden.
        Außerdem solltest du dir angewöhnen, PHP-Abschnitte mit "<?php" zu beginnen und nicht die Kurzform "<?" zu verwenden. Sonst fällst du beim nächsten Providerwechsel vielleicht wieder auf die Nase - denn short_open_tags ist auch eine Konfigurationseinstellung, die der Disziplin wegen immer häufiger deaktiviert wird.

        So long,
         Martin

        --
        Wenn alle das täten, wass sie mich können,
        käme ich gar nicht mehr zum Sitzen.
  2. echo $begrüßung;

    Ich habe meinen Hoster gewechselt. Nun habe ich festgestellt, dass ich die Übergabe von Variabeln (zumindest in Links) anders handhaben muss.

    Alles was über HTTP kommt sind keine Variablen sondern Parameter. PHP stellt dir diese Parameterwerte als Variablen in vorgefertigen Arrays zur Verfügung.

    $var=$_GET["var"];
    Nur so kann ich die Variabeln im Code verwenden. Bis anhin ging es ohne!

    Das stimmt so nicht. Das Anlagen einer weiteren Variable aus den Werten in den vordefinierten Arrays ist nicht nur überflüssig sondern verschleiert im weiteren Verlauf die Herkunft der Werte und macht durch die zusätzlichen Variablen das Script komplexer. $_GET["var"] ist bereits eine Variable, auf die wie auf jede andere Variable auch zugegriffen werden kann. Zudem hat $_GET und Konsorten gegenüber selbst angelegten Variablen den Vorteil, in jedem Scope zur Verfügung zu stehen.

    <?

    Auch diese Kurzschreibweise ist nicht überall zugelassen, weil sie mit der XML-Einleitung kollidieren kann.

    • Ist das mit dem zusätzlichen Code im Header sauberer programmiert?

    Nein.

    • Kann ich dies umgehen?

    Ja. Verwende $_GET und Konsorten direkt.

    Ich wäre um Eure Meinung sehr dankbar. Ich habe echt keinen Bock all meine Scripts umprogrammieren zu müssen.

    Wenn du sowieso schon dabei bist, stell zum Entwickeln gleich noch das error_reporting auf E_ALL (und display_errors auf on), damit du weitere Jugendsünden wie Zugriffe auf nicht initialisierte Variablen angezeigt bekommst.

    echo "$verabschiedung $name";