Thomas Schmieder: Sicherheitslücke oder Denkfehler?

Hallo,

ich hasse die Escapetaste ;-(( Habe wohl den vi schon zusehr drin.

Eingabe in Startsteite:
...
 <a href="./antwort01.php?HTTP_GET_VARS=aetsch" target="_blank">Variablenanzeige mit Uebergabe GET</a><br />
...

geht an Script antwort01.php:
...

</table>
  <table width="80%" rules="all">
  <caption align="left"><h1>Getvariablen</h1></caption>
  <tr>
    <th align="left">Index aus Array</th>
    <th align="left">Wert der Variablen</th>
    <th align="left">Scriptvariable</th>
  </tr>
<?
    foreach ($HTTP_GET_VARS as $key => $value)
    {
      echo "<tr>
              <td><b>$key</b></td>
              <td>$value</td>
              <td>".$$key."</td>
            </tr>";
  }
?>
...

Das ganze kann man auch mit den Postvariablen machen. Bringt PHP ganz schön durcheinander. Version ist noch 4.0.4 pl1

Ist das in den neueren Versionen inzwischen repariert? Wisst Ihr was?

Grüße

Tom

  1. Hallo,

    [...]
    Das ganze kann man auch mit den Postvariablen machen. Bringt PHP ganz schön durcheinander.
    Version ist noch 4.0.4 pl1

    Deshalb (unter anderem) ist bei neueren PHP-Versionen register_globals ausgeschaltet.

    Ist das in den neueren Versionen inzwischen repariert? Wisst Ihr was?

    Repariert nicht. Aber register_globals ist aus. Dann gibt es pro CGI-Parameter einen Eintrag in
    $_GET.

    Gruesse,
     CK

    1. Hi Christian,

      [...]
      Das ganze kann man auch mit den Postvariablen machen. Bringt PHP ganz schön durcheinander.
      Version ist noch 4.0.4 pl1

      Deshalb (unter anderem) ist bei neueren PHP-Versionen register_globals ausgeschaltet.

      Ist das in den neueren Versionen inzwischen repariert? Wisst Ihr was?

      Repariert nicht. Aber register_globals ist aus. Dann gibt es pro CGI-Parameter einen Eintrag in
      $_GET.

      also doch Denkfehler. Schalte ich gleich mal register_globals aus und versuchs dann nochmal.

      Danke

      Tom

      1. Hallo alle zusammen,
        hallo Christian,

        ich habe den Versuch mit abgeschalteten register_globals wiederholt und bin LEIDER zum gleichen Ergebnis gekommen. Bei Version 4.0.4pl1 wird die Array-Variable zerstört. Er erkennt aber noch, dass es sich um ein Array handelt ($$key). Es liegt also ein Konflikt mit dem Gültigkeitsbreich vor. Kann man denn im Script erzwingen, dass man man die Variable aus der obersten Hierarchiestufe haben will?

        Ich bitte Euch nun, den Verusch auch mal auf neuren PHP-Versionen zu wiederholen

        Grüße

        Tom

        1. Moin!

          Ich bitte Euch nun, den Verusch auch mal auf neuren PHP-Versionen zu wiederholen

          Bei Version 4.2.3 kann ich mit dem Parameter ?_GET=wert keine Zerstörung feststellen. Er übernimmt wunschgemäß den Parameter in die Variable $_GET['_GET'].

          - Sven Rautenberg

          1. Hi Sven, Tom, Christian...

            Ich bitte Euch nun, den Verusch auch mal auf neuren PHP-Versionen zu wiederholen

            Bei Version 4.2.3 kann ich mit dem Parameter ?_GET=wert keine Zerstörung feststellen. Er übernimmt wunschgemäß den Parameter in die Variable $_GET['_GET'].

            Ich ebenso, und zwar ist das bei allen globals so.
            Tom meint mittlerweile, dass sein (Denk-)Fehler im Selbsbeziehen auf den Variablennamen in einer foreach-schleife (mittels $$wert) liegt. In sofern ist denke ich klar gestellt, dass dieses Risiko ein selbstgemachtes war.

            • Sven Rautenberg

            Fabian

            1. Hallo zusammen,

              vielen Dank für die Denkhilfe. Hatte wohl etwas im Kreis herumgebastelt und gedacht.

              Ist aber ein wichtiges Argument, register_globals=off zu behalten und dann auch ganz konsequent mit den Array-Variablen zu arbeiten, und auch kein session_register() mehr zu benutzen, sondern nur Direktzuweisungen auf $_SESSION['bla'].

              Werde mir mal schnellstens die neue Version von PHP installieren. Dies $HTTP_*_VARS ist mir doch zu lang ;-) Welche Version ist denn jetzt fehlerfrei? Da war doch was mit dem Fileupload, oder? Darum hatte ich ja noch nicht umgestellt.

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

              Tom