String absichern

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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...
    Last edited by TobiaZ; 24-03-2006, 17:21.

    Comment


    • #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

      Comment


      • #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 )

        Comment


        • #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.

          Comment


          • #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.

            Comment


            • #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.)
              Last edited by globqluqqlo; 24-03-2006, 21:09.

              Comment

              Working...
              X