Array in $_POST

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

  • Array in $_POST

    Hallo,

    ich habe etwas im Internet gefunden, dass $_POST und andere Arrays durchsuchen kann und jeden nichtzahlwert nach Sonderzeichen durchsucht. Dies klappt auch alles, nur wenn ich per $_POST ein Array übergebe, ist dieses nach dem durchsuchen leer.
    Das was ich mache, sieht so aus:

    PHP-Code:
    $PROTECT = array (
       
    "& " => "&",
       
    "# " => "#",
       
    "!" => "!",
       
    '"' => """,
       
    "$" => "$",
       
    "%" => "%",
       
    "'" => "'",
       
    "(" => "(",
       
    ")" => ")",
       
    "*" => "*",
       
    "/" => "&#47",
       
    ">" => "<",
       
    "<" => ">",
    );

    function 
    VAR_DECODE($VAR) {
       global 
    $PROTECT;
          
       if(
    is_array($VAR))
           foreach(
    $VAR as $key => $val)
              
    $VAR[$key]=VAR_DECODE($val);
       
       if (
    get_magic_quotes_gpc())
           
    $VAR stripslashes($VAR);
       
       if (!
    is_numeric($VAR) && !is_array($VAR))
       {
           foreach(
    $PROTECT as $key => $val)
               
    $VAR str_replace($key$val$VAR);
           
       }

       return 
    $VAR;
    }

    foreach(
    $_POST as $key => $val)
        
    $_POST[$key] = VAR_DECODE($val); 
    Woran liegt es, dass das Array in $_POST leer ist?

    Danke.
    Zuletzt geändert von Realmaker; 03.02.2006, 10:54.

  • #2
    Vielleicht an der 2. Anmerkung hier ?

    Kommentar


    • #3
      Du meinst das %_POST? Das war ein Vertipper

      Kommentar


      • #4
        PHP-Code:
        function VAR_DECODE($VAR) {
           global 
        $PROTECT;
              
           if(
        is_array($VAR)) {
               foreach(
        $VAR as $key => $val) {
                  
        $VAR[$key]=VAR_DECODE($val);
               }
           }
           
           if (
        get_magic_quotes_gpc()) {
               
        $VAR stripslashes($VAR);
           }
           
           if (!
        is_numeric($VAR) && !is_array($VAR))
           {
               foreach(
        $PROTECT as $key => $val) {
                   
        $VAR str_replace($key$val$VAR);
               }
               
           }

           return 
        $VAR;
        }

        $_POST VAR_DECODE($_POST); 
        erst mal solltest du dir angewöhnen geschweifte klammern zu setzen.. ich tipp mal, dass es daran irgendwie dran lag. und das foreach() das nicht in der funktion ist bei dir, ist eigentlich total unnötig, dazu hast du doch eine rekursive funktion

        mfg

        ps: ka ob der code oben geht, hab nur mal die geschweiften klammern eingefügt.. fehler hab ich so spontan nicht gefunden

        Kommentar


        • #5
          Wenn man einen If-Block hat, in dem nur ein Befehl ausgeführt werden soll, muss man keine geschweiften Klammern setzen, das ist also nicht das Problem und das mit dem rekursiv ist Absicht, da ich dadurch Arrays in dem Array überprüfen kann, aber ich vermute, dass da irgendwo der Fehler liegt.

          Kommentar


          • #6
            Nja
            if + foreach + foreachanweisung = 3 zeilen.. weiß nicht wie es da gehandhabt wird daher auch nur vermutung..

            und das rekursive war mir klar.. nur du brauchst das array nicht ausserhalb durchlaufen wenn du es intern auch noch mal tust...
            falls der groschen immer noch nicht gefallen ist, dann vergleich mal unsere beiden codes..

            egal zurück zum thema..
            wird den die anweisung mit str_replace überhaupt ausgeführt?? lass dir doch ausgeben, wann welcher string ersetzt wird..
            mfg

            edit:

            evtl liegs hierran:
            PHP-Code:
            if (get_magic_quotes_gpc()) {
                   
            $VAR stripslashes($VAR);
               } 
            hau das mal in dem
            PHP-Code:
             if (!is_numeric($VAR) && !is_array($VAR)) 
            block mit rein
            mfg

            Kommentar


            • #7
              Ich lasse das Array drinnen nicht "nochmal" durchlaufen, nur wenn in dem Array, das ich außerhalb durchlafen lassen, noch ein Array ist, lasse ich dieses nochmal durchlaufen, sonst nicht. An die Funktion selbst wird nämlich nicht das Array $_POST übergeben, sondern der aktuellen Wert des Durchlaufs.

              Kommentar


              • #8
                ES IST ABER SINNLOS DOPPELTGEMOPPELT!!! MAN MAN

                (Ps: mit absicht groß geschrieben)

                Kommentar


                • #9
                  Hi,

                  Entfern deine Schleife und übergebe $_POST.
                  Dann speicher den Rückgabewert nicht in $_POST, sondern eine andere Variable.

                  Vielleicht funktioniert es dann.

                  Gruß Thomas

                  Kommentar


                  • #10
                    Wie wär's mit 'nem Else? Und das str_replace() kann auch direkt mit Arrays ....
                    PHP-Code:
                    function var_decode(&$var) {
                      global 
                    $PROTECT;

                      if (
                    is_array($var)) {
                        foreach(
                    $var as $key => $value) {
                          
                    $var[$key] = var_decode($value);
                        }
                      } else {
                        if (
                    get_magic_quotes_gpc()) {
                          
                    $var stripslashes($var);
                        }
                        
                    $var str_replace(array_keys($PROTECT), $PROTECT$var);
                      }
                      return 
                    $var;
                    }

                    // testen:
                    error_reporting(E_ALL);
                    header('Content-Type: text/plain');
                    var_dump($_POSTvar_decode($_POST)); 

                    Kommentar


                    • #11
                      Danke onemorenerd, so geht es
                      Aber trotzdem nochmal ne kurze Frage: Meint ihr, ich sichere meine Seite so genug ab indem ich die Eingaben auf diese Weise überprüfe?

                      Kommentar


                      • #12
                        Was bekommt die Seite denn übergeben, was soll sie damit machen und wovor willst du sie genau schützen?

                        Dein Ansatz sieht mir aus wie "diese Zeichen könnten schaden, also ersetze ich sie". Wenn das so ist, schießt du mit Schrot auf eine Fliege: Es geht viel kaputt dabei, aber die Fliege hat gute Chancen zu überleben.

                        Kommentar


                        • #13
                          Sowas hab ich sehr oft:
                          Code:
                          ... WHERE id = '.$_GET['id']);
                          (Ich lasse meine Funktion natürlich auch $_GET überprüfen)

                          Kommentar


                          • #14
                            - is_numeric und Kollegen
                            - mysql_real_escape_string
                            - http://www.google.com/search?q=SQL+Injection+php

                            Kommentar

                            Lädt...
                            X