Ankündigung

Einklappen
Keine Ankündigung bisher.

SQLi trotz mysql_real_escape_string

Einklappen

Neue Werbung 2019

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

  • SQLi trotz mysql_real_escape_string

    Hallo,

    hab ein "kleines" Problem, obwohl ich
    PHP-Code:
    mysql_real_escape_string() 
    benutzte sind SQLi möglich.

    Code:

    PHP-Code:
    <?php
        
    // Captcha
        
    $captcha_code rand(10000,99999);
        
        
    // Artikel kommentieren
        
        
    $kommentar_autor             mysql_real_escape_string($_POST["kommentar_autor"]);    
        
    $kommentar_datum             mysql_real_escape_string($_POST["kommentar_datum"]);    
        
    $kommentar_uhrzeit             mysql_real_escape_string($_POST["kommentar_uhrzeit"]);    
        
    $news_id                     mysql_real_escape_string($_POST["news_id"]);    
        
    $kommentar_inhalt             mysql_real_escape_string($_POST["kommentar_inhalt"]);    
        
    $cpt                        mysql_real_escape_string($_POST["cpt"]);
        
        if(isset(
    $_POST) && count($_POST) > 0) {
        
            if(empty(
    $_POST["kommentar_autor"]) OR empty($_POST["kommentar_inhalt"]) OR empty($_POST["cpt"])) {
                echo 
    ' Bitte f&uuml;lle alle Felder aus! ';
            }    
            elseif (
    $_POST["cpt"] !== $captcha_code) {
                echo 
    'Der eingegebene Captcha Code ist ung&uuml;ltig, bitte erneut versuchen!';
            }
            else{                                                                                            
                
    $kommentar_erstellen mysql_query("INSERT INTO news_kommentar (news_id, datum, uhrzeit, autor, content) VALUES ('$news_id', '$kommentar_datum', '$kommentar_uhrzeit', '$kommentar_autor', '$kommentar_inhalt');");
            }
            if (
    $kommentar_erstellen === true)  {
                echo 
    "Dein Kommentar wurde erfolgreich hinzugef&uuml;t! <meta http-equiv=\"refresh\" content=\"5; URL=" $_SERVER['PHP_SELF']. "\">";
            }
            else {
                echo 
    '<br /><u>Ein Problem ist aufgetretten, bitte versuche es erneut!</u><br />';
            }    
        }
    ?>
    Screenshot:



    Und außerdem funktioniert mein kleines Captcha-Script nicht. Es wird eine Zufallszahl generiert und diese soll als Captcha dienen. Ist zwar nicht die beste Methode, aber mir reicht sie. Das Problem ist, dass der Captcha Code immer als fehlerhaft angezeigt wird beim absenden des Formulares.

  • #2
    Dein Problem ist: du benutzt immernoch mysql_* anstatt PDO. Und: Du hast nie Grundladen gelernt.
    [URL="http://goo.gl/6Biyf"]Lerne Grundlagen[/URL] | [URL="http://sscce.org/"]Schreibe gute Beispiele[/URL] | [URL="http://goo.gl/f2jR7"]PDO > mysqli > mysql[/URL] | [URL="http://goo.gl/jvfSZ"]Versuch nicht, das Rad neu zu erfinden[/URL] | [URL="http://goo.gl/T2PU5"]Warum $foo[bar] böse ist[/URL] | [URL="http://goo.gl/rrfzO"]SQL Injections[/URL] | [URL="http://goo.gl/Q81WJ"]Hashes sind keine Verschlüsselungen![/URL] | [URL="http://goo.gl/2x0e2"]Dein E-Mail Regex ist falsch[/URL]

    Kommentar


    • #3
      Äh, und wo siehst du da eine SQLi?

      Außerdem passt der Codeausschnitt nicht zum Fehler.
      [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

      Kommentar


      • #4
        Hi,

        benutzte sind SQLi möglich.
        wie kommst du darauf Du hast vermutlich die falsche Syntax oder falsch übergeben (dafür müsste man dein query Geschichte sehen)!

        http://www.lmgtfy.com/?q=mysql_fetch...to+be+resource

        Bitte benutz PDO oder mysqli, mysql_* ist veraltet!

        echo ' Bitte f&uuml;lle alle Felder aus! ';
        Bitte auch vernünftig kodieren!

        mfg wolf29
        while (!asleep()) sheep++;

        Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

        Kommentar


        • #5
          Also ist das keine SQLi?

          Dann ist das Problem ja geklärt, komme aber mit dem Captcha nicht klar. Obwohl die eingegebene Zahl der Captcha-Code ist, wird er als falsch angesehen.

          Kommentar


          • #6
            Also ist das keine SQLi?
            Unsere kommentare bitte vernünftig durchlesen, meinen Link mal anklicken und dich über google informieren, was für ein Fehler das ist (siehe im Link). Zudem kannst du deine query auch mal posten.

            Zusätzlich auf mysql_* auf PDO oder mysqli umsteigen und

            Dann ist das Problem ja geklärt, komme aber mit dem Captcha nicht klar. Obwohl die eingegebene Zahl der Captcha-Code ist, wird er als falsch angesehen.
            ist keine Frage und zu wenig Information. Hast du schon gedebugt?

            mfg wolf29
            while (!asleep()) sheep++;

            Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

            Kommentar


            • #7
              Also, mit $captcha_code = rand(10000,99999); soll eine Zufallszahl generiert werden, diese Zahl soll auch als Captcha dienen. Bis jetzt auch alles richtig, aber sobald man in dem Formular die richtige Zahl eingibt, kommt die Meldung vom Elseif:
              PHP-Code:
              elseif ($_POST["cpt"] !== $captcha_code) {
                          echo 
              'Der eingegebene Captcha Code ist ung&uuml;ltig, bitte erneut versuchen!';
                      } 
              $_POST["cpt"] ist der Code den man im Formular abgesendet hat.

              Es funktioniert aber nicht, obwohl der Captcha richtig abgesendet wurde im Formular.

              Kommentar


              • #8
                Das "kommentar_inhalt" als GET Parameter übergeben wird liegt wohl mehr daran das dein Formular die Daten per GET versendet statt per POST ... füge mal method="POST" in dein <form> Tag ein ...

                Zum Captcha ... beim aufruf der Seite wird die Zahl generiert, beim absenden des Formulares wird wieder eine neue Zahl generiert, selbst wenn dein Script an dieser stelle noch wissen würde welche Zahl es beim ersten aufruf generiert hat, würde diese, beim absenden wieder überschrieben werden.


                Wenn du die Daten vom Formular in der gleichen Datei verarbeitest in der du die Ausgabe erzeugst, dann setz die verarbeitung an den Anfang und alles andere danach. Weitergin solltest du den Captcha Code in der Session zuwischenspeichern damit dein Script diesen mit deiner Eingabe im Formular vergleichen kann. Die Captcha prüfung stellst du dann an den Anfang deiner Prüfung [pseudo] wenn SESSION[cpt] != $_POST[cpt] -> Fehler + neuen Captcha Code generieren (nicht vergessen die entsprechende Session Varible zu überschreiben!). Wenn die Übverprüfung korrekt ist, kommt in den entsprechenden case deine restliche Überprüfung.

                BTW.: das ist kein SQLi ... -> http://de.wikipedia.org/wiki/SQL-Injection

                Kommentar


                • #9
                  Wie soll es denn auch anders sein, wenn du nach dem absenden einen neuen Code generierst? Ist die Seite für Wahrsager only? Wenn nein solltest du da was dran ändern.
                  [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

                  Kommentar


                  • #10
                    Danke @der_robert, ist jetzt erledigt.

                    Kommentar


                    • #11
                      diese Zahl soll auch als Captcha dienen

                      Kommentar

                      Lädt...
                      X