Finde Fehler nicht

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

  • Finde Fehler nicht

    Hallo,
    ich führe 3 Operationen in einem Query aus, aber ich finde den Fehler nicht, hier ist Query:
    PHP-Code:
    $db->query("UPDATE `hs_dir_nest` SET `rgt`=`rgt`+2 WHERE `rgt`>".$rgt";".
                 
    "UPDATE `hs_dir_nest` SET `lft`=`lft`+2 WHERE `lft`>".$rgt";".
                 
    "INSERT INTO `hs_dir_nest` SET `lft`= ".($rgt+1).", `rgt`=".($rgt+2).";"
                 
    ); 
    So sieht er ausgegeben aus:
    UPDATE `hs_dir_nest` SET `rgt`=`rgt`+2 WHERE `rgt`>10;UPDATE `hs_dir_nest` SET `lft`=`lft`+2 WHERE `lft`>10;INSERT INTO `hs_dir_nest` SET `lft`= 11, `rgt`=12;

    und der Fehler:
    You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ';UPDATE `hs_dir_nest` SET `lft`=`lft`+2 WHERE `lft`>10;INSERT I
    Ich verstehe nicht, was da nicht geht.
    SQL Injection kitteh is...

  • #2
    MySQL läßt über PHP nur 1 Operation zu ...

    d.h. keine Semikolons in Query erlaubt und maximal 1 Query je mysql_query ,....
    chansel0049
    ----------------------------------------------------
    if you've reached the bottomline - dig further!
    Übersetzer gesucht? http://www.babelport.com

    Kommentar


    • #3
      Das ist mir neu, kannst du mir einen Link zu deiner Informationsquelle geben? Auf PHP.net kann ich nichts deartiges lesen.
      SQL Injection kitteh is...

      Kommentar


      • #4
        http://www.php.net/manual/de/functio...uery.php#37870
        http://tut.php-q.net/mysql-query.html#u3

        Wahrscheinlich ist das so, um Injection vorzubeugen.

        Kommentar


        • #5
          Ah, ok, nun bin ich schlauer.

          Aber nicht glücklicher
          SQL Injection kitteh is...

          Kommentar


          • #6
            Das macht MySQL aber auch nur bedingt sicher vor Injections
            chansel0049
            ----------------------------------------------------
            if you've reached the bottomline - dig further!
            Übersetzer gesucht? http://www.babelport.com

            Kommentar


            • #7
              Was heißt denn bedingt, wie kann man denn noch Injections machen?
              Ich dachte bis dato, dass man eben ins Statement ein ; einfügt und mit eigenem Code fortfährt, was ja garnicht geht, wenn nur eine Operation ausgeführt werden kann
              SQL Injection kitteh is...

              Kommentar


              • #8
                Es gibt noch andere Möglichkeiten, besonders mit den Neuerungen nach 4.1 per Blind Injections, aber es geht wohl auch anders glaubt gewissen Quellen

                Allerdings bin ich weder ein Cracker noch Nerd genug um mit Halbwissen auf diesen Gebieten zu prahlen. Fakt ist es geht (Hab als Test mal meine LAMP Testumgebung damit lahmgelegt)

                zwar kann man keine zweite Query oder mit ";#" die Query kürzen, aber es gibt schliesslich auch die möglichkeit Funktionen oder Subqueries abzusetzen

                deshalb immer schön prüfen was eigentlich an Daten ankommt, ob's String oder Numeric ist und escapen wenn nötig, Dabei auch an PHPs loose Data Type Conversion denken, denn :

                PHP-Code:
                $test '5 ist aber ein String';
                if (
                == $test) {print "Danger"}; 
                Ausgabe
                Danger
                chansel0049
                ----------------------------------------------------
                if you've reached the bottomline - dig further!
                Übersetzer gesucht? http://www.babelport.com

                Kommentar


                • #9
                  Original geschrieben von Seikilos
                  Was heißt denn bedingt, wie kann man denn noch Injections machen?
                  Ich dachte bis dato, dass man eben ins Statement ein ; einfügt und mit eigenem Code fortfährt, was ja garnicht geht, wenn nur eine Operation ausgeführt werden kann
                  indem man z.B.: ungeprüfte Variablen in den Query String einbaut nicht nicht escaped werden......

                  Könnte aus Andeutung (ohne Syntax);

                  mysql_query(Select pm_title, pm_body FROM pm WHERE user_id=$user_id);

                  -------------------------------------------------------
                  z.B. folgendes werden bei der Situation
                  $user_id=$_REQUEST['user_id'];

                  mysql_query(Select pm_title, pm_body FROM pm WHERE user_id=$user_id);

                  dann übergibt einer vll. via url oder Formular 5 OR username=admin

                  dann würde das Statment nun so aussehen:

                  mysql_query(Select pm_title, pm_body FROM pm WHERE user_id=5 OR username=admin);

                  Indem Fall würde man ein Eigenanteil einschmuggeln welches die Query nun die eigenen PMs als auch die des Admins anzeigen würde. Ein noch harmloses Beispiel.......

                  Das wäre z.B. mit http://de3.php.net/manual/de/functio...ape-string.php
                  nicht passiert......

                  Wobei es unwahrscheinlich ist das username in der Table PM auftritt, jedoch nur um mal das Gefühl der Gefahr zu vermitteln die besteht wenn eine Schnittstelle zum User offen ist, die noch wissen was sie tun.

                  Besonders kritisch ist das ganze bei Skripts die der Öffentlichkeit zugänglich sind wie z.B. die PHPBB Forensoftware.....Wäre der Quellcode nicht öffentlich würden auch nicht diverse Bugs zum Vorschein kommen die sich eine zeitlang mit SQL Injektions abgespielt hat als auch mit ein paar PHP Funktionen die schlüpfrig waren.
                  Zuletzt geändert von Payne_of_Death; 02.07.2005, 14:47.
                  [color=blue]MfG Payne_of_Death[/color]

                  [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
                  [color=red]Merke:[/color]
                  [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

                  Murphy`s Importanst LAWS
                  Jede Lösung bringt nur neue Probleme
                  Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
                  In jedem kleinen Problem steckt ein großes, das gern raus moechte.

                  Kommentar


                  • #10
                    Mensch Payne, bring leute nicht noch auf Gedanken ..

                    Ich seh schon irgendso ein Skriptkiddie diese Forum lesend und dann am Versuch Microsoft.com lahmzulegen
                    chansel0049
                    ----------------------------------------------------
                    if you've reached the bottomline - dig further!
                    Übersetzer gesucht? http://www.babelport.com

                    Kommentar


                    • #11
                      Original geschrieben von chansel0049
                      MySQL läßt über PHP nur 1 Operation zu ...

                      d.h. keine Semikolons in Query erlaubt und maximal 1 Query je mysql_query ,....
                      Richtig, was aber nicht heißen muss, dass die Class nicht in der Lage ist die ; zu explodieren! *da ne idee für meine klasse habe* ^^

                      Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
                      sondern mit den Augen das Manual zu lesen.

                      Kommentar

                      Lädt...
                      X