SQL korrekt escapen

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

  • SQL korrekt escapen

    hi!

    habe mir folgenden ansatz überlegt um SQL injections abzufangen.

    im programm ist es ggf. nötig mehrere SQL-statements hintereinander abzusetzen (INSERT, UPDATE, ...). jedes statement besteht aus einem query und den zugehörigen parametern:
    PHP-Code:
    $query1 "1";
    $query2 "2";
    $query3 "3";

    $params1 = Array("a" => "a'x'a""b" => "s\x/s""c" => 'd"q"');
    $params2 = Array("a""s""d""f");
    $params3 = Array("a""s""d""f");

    $cmd[] = Array("params" => $params1"query" => $query1);
    $cmd[] = Array("params" => $params2"query" => $query2);
    $cmd[] = Array("params" => $params3"query" => $query3); 
    in einer klasse mit dem namen db gibt es eine funktion foo($command), die jeden übergebenen befehl sukzessive abarbeitet.

    zuerst sollen sämtliche parameter mit addslashes behandelt werden, wenn magic_quotes nicht aktiv ist und anschließend sollen die korrekt escapten parameter ins query eingebunden werden und das query abgesetzt werden:
    PHP-Code:
    class db
    {
        function 
    foo($command)
        {
            foreach (
    $command as $cmd) {
                foreach (
    $cmd["params"] as $param) {
                    echo 
    addslashes($param) . " - ";
                }

                echo 
    "<br>";
                echo 
    $cmd["query"] . "<br><br>";
            }
        }

    mein problem besteht nun darin, wie ich es schaffe, die einzelnen parameter des $cmd["params"]-arrays in den string $cmd["query"] einzubinden, nachdem addslashes erfolgt ist.

    vorschläge? gibts evt. bereits fertige lösungen mit diesem ansatz?

    bin für jeden hinweis dankbar.


    EDIT:
    unter "parameter" versteh ich übrigens, variablen, wie z.b. $id in folgendem query:

    PHP-Code:
    $sql "SELECT `name` FROM `test` WHERE `id` = " $id

    Zuletzt geändert von php_rookie; 01.04.2004, 09:05.

  • #2
    http://www.php-resource.de/forum/sea...der=descending

    Kommentar


    • #3
      eine möglichkeit für obige frage wäre die folgende:
      PHP-Code:
      $foo "das [0] ist [1] ein [2] test";
      $bar = Array("hier""offensichtlich""erfolgreicher");

      echo 
      $foo "<br>";

      for (
      $i 0$i sizeof($bar); $i++) {
          
      $foo str_replace("[" $i "]"$bar[$i], $foo);
      }

      echo 
      $foo "<br>"
      verbesserungsvorschläge?

      @ asp2php: danke, seh ich mir dann auch noch an.

      Kommentar


      • #4
        hier nochmals ein zusammengebautes, aber aufs wesentlichste reduziertes beispiel:
        PHP-Code:
        <?php
        ini_set
        ("magic_quotes_gpc"0);

        class 
        db
        {
            function 
        execute($queries)
            {
                unset(
        $values);

                foreach (
        $queries as $query) {
                    if (
        get_magic_quotes_gpc() == 0) {
                        echo 
        "werte werden behandelt<br>";
                        foreach (
        $query["values"] as $value) {
                            
        $values[] = mysql_escape_string($value);
                        }
                    } else {
                        echo 
        "keine manipulation<br>";
                        
        $values $query["values"];
                    }

                    for (
        $i 0$i sizeof($values); $i++) {
                        
        $query["sql"] = str_replace("[" $i "]"$values[$i], $query["sql"]);
                    }

                    echo 
        $query["sql"] . "<br><br>";
                }
            }
        }

        $sql "1: [0], 2: [1], 3: [2]";
        $values = Array("a'x'a""b\\x/b"'c"x"c');
        $queries[] = Array("values" => $values"sql" => $sql);

        $db = new db;
        $db->execute($queries);
        ?>
        spricht etwas dagegen, es so zu handhaben, dass die parameter unmittelbar vor dem mysql_query() escaped werden? wie lässt sich magic_quotes vorübergehen deaktivieren um die funktion zu testen?
        Zuletzt geändert von php_rookie; 01.04.2004, 10:39.

        Kommentar


        • #5
          bitte um verzeihung, dass ich mir wieder selbst antworte, aber ist es im letzten beispiel überhaupt sinnvoll auf get_magic_quotes_gpc() zu prüfen? schlussendlich soll statt dem
          PHP-Code:
          echo($query["sql"]) 
          ein
          PHP-Code:
          mysql_query($query["sql"]) 
          erfolgen.

          da bei aktiviertem get_magic_quotes_gpc() ja keine " bzw. ' escaped werden sind sql-injections wieder möglich, oder? es wird schließlich ein string übergeben.

          bitte helft mir den knopf in meinem hirn aufzulösen. ich steh grad ein wenig an.

          Kommentar


          • #6
            Original geschrieben von php_rookie
            da bei aktiviertem get_magic_quotes_gpc() ja keine " bzw. ' escaped werden sind sql-injections wieder möglich, oder?
            mach dir mal klar, was magic_quotes_gpc bewirkt.

            bitte helft mir den knopf in meinem hirn aufzulösen. ich steh grad ein wenig an.
            hilf dir selbst - wir hatten in letzter zeit mehrere thread zu dem thema, in denen wir das in aller ausführlichkeit durchdiskutiert haben.

            also lies dort bitte nach, und ziehe die richtigen schlüsse.

            das thema erneut aufzuwärmen, besteht zum einen kein bedarf, und zum anderen merkst du ja, dass kaum einer lust darauf zu haben scheint.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              http://www.php-resource.de/forum/sho...1&pagenumber=5


              steht sogar noch auf der ersten Seite paar Zeilen tiefer.
              mfg
              marc75

              <Platz für anderes>

              Kommentar

              Lädt...
              X