String absichern

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

  • String absichern

    Hi,

    hier sind bestimmt auch viele, die ihre Navigation z.B. so aufbauen:

    index.php?module=news


    und diese dann so abfragen:

    PHP-Code:
    $variable $_GET['module']; 
    Was genau macht ihr so, um diese Variable abzusichern ?

    Reicht das z.B. aus ?

    PHP-Code:
    switch($module) {
            case 
    "summary"     :
            case 
    "dater" :
            case 
    "calendar" : require("modules/module_" $module ".inc.php"); break;
            
            default                    : require(
    "modules/module_" "summary" ".inc.php");
        } 
    Ich mach z.B. keine SQL-Befehle, in denen Variablen vorkommen, die von aussen kommen (Post, session oder Get)

    Reicht das so mit dem switch, oder gibs in PHP bekannte Sicherheitsprobleme in dieser Richtung ?

    Weil theoretisch dürfte er so ja nur andere Dateien inkludieren, wenn genau der string vorkommt.


    cya max


    An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

  • #2
    eigentlich bist du doch lang genug dabei um die diversen threads zu dem Thema mitbekommen zu haben...

    case "calendar" : require("modules/module_" . $module . ".inc.php"); break;
    überleg doch mal, welche werte $module alle haben könnte. Da bleibt nicht viel übrig, oder

    btw:
    : require("modules/module_" . "summary" . ".inc.php");
    was diese formulierung und aufsplittung soll, weiß wohl auch keiner...
    Zuletzt geändert von TobiaZ; 24.03.2006, 18:21.

    Kommentar


    • #3
      im default:-Fall auch ein break; und switch ($variable) ........

      Theoretisch kann ein falsches $_GET kommen, das nicht zur Vorgeschichte passt.

      zB wenn ?login kommen sollte, macht sie direkt ?module=sendmoney&amount=10Mio&whom=tome

      Kommentar


      • #4
        Original geschrieben von globqluqqlo
        im default:-Fall auch ein break; und switch ($variable) ........

        Theoretisch kann ein falsches $_GET kommen, das nicht zur Vorgeschichte passt.

        zB wenn ?login kommen sollte, macht sie direkt ?module=sendmoney&amount=10Mio&whom=tome
        also normalerweise wird nach dem defualt zweig eh abgebrochen, wenn nicht wäre das ein Bug in PHP, was ich nicht glaube


        naja es geht auch nur darum, die richtige datei einzubinden, und wenn man irgendwas eingibt, dann wird die datei ja nicht geladen, und die daten müssen im jeweiligen modul ja eh auf konsistenz geprüft werden


        An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

        Kommentar


        • #5
          Eine zweite Absicherung gegen script injection besteht darin, dass Du im require vor dem variabeln Modulnamen etwas hast. Deshalb wirkt module=http://.. nicht. Und übrigens werde ich im require immer file:// hinschreiben (habs aber noch nicht probiert)

          PS default, Du hast recht, die default clause muss (should) am Schluss sein.

          Kommentar


          • #6
            Original geschrieben von globqluqqlo
            Und übrigens werde ich im require immer file:// hinschreiben (habs aber noch nicht probiert)
            Auf den Test wäre ich aber gespannt ...
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              PHP-Code:
              <?
               $fall=3;
               switch($fall){
               default: echo 'default'; 
               case 1 : echo 'fall2';
               case 2 : echo 'fall1';
               }
                echo '<br />';

                print_r(stream_get_wrappers());
               
               // "file://vars.php" hat nicht funktioniert. Deshalb mal aus dem c:\ included
                require ('file://'.'c:/vars'.'.php');

                // mit Pfadbehandlung
                $path = $_SERVER['ORIG_PATH_TRANSLATED'];
                $path = dirname($path) . '/';
                require ('file://'. $path . 'vars' . '.inc.php');

              ?>
              addi-it: tailquestion, welche server Variable gibt mir offiziell, wo mein Skript ist? (ich habe Zugang zu zwei Servern, die vorhandene servervariablen sind weit auseinander.)
              Zuletzt geändert von globqluqqlo; 24.03.2006, 22:09.

              Kommentar

              Lädt...
              X