SQL-Injections zum Test ausführen,aber wie?

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

  • SQL-Injections zum Test ausführen,aber wie?

    Hallo Leute!

    Ich bin grad dabei meine Seite noch mal bevor sie online geht vollkommen zu checken ob sie auch vor Sql Injections sicher ist! Bei Formulareingaben sichere ich die Felder mit einem preg_match() ab so kann mir da meines Wissens ja keiner mehr Probleme machen. Das auslesen nach id sichere ich mit zum Beispiel so ob Where id="(int)$_GET['id']"!

    Nun habe ich gesucht wie ich SQL Injections ausführen kann für verschiedene Fälle aber leider nicht gefunden was mir hilft ein Injection zu schreiben! Ich habe von Injections auch nicht so die Ahnung!

    Könnt ihr mir da helfen wo ich was finde das Injections schreiben kann um meine Seite zu testen?

    Vielen Dank mfg der Litter
    Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
    http://www.lit-web.de

  • #2
    Hier findest du ein paar Beispiele:

    http://de.wikipedia.org/wiki/SQL-Injektion

    Wenn du eine "Ganzzahl" erwartest, bist du mit intval auf der sicheren Seite.
    4cms.de

    Kommentar


    • #3
      Bei Formulareingaben sichere ich die Felder mit einem preg_match() ab so kann mir da meines Wissens ja keiner mehr Probleme machen. Das auslesen nach id sichere ich mit zum Beispiel so ob Where id="(int)$_GET['id']"!
      mysql_real_escape_string für Zeichenketten, nicht nur per Regex überprüfen. Oder wie gehst du mit Strings um?

      Kommentar


      • #4
        Original geschrieben von bUTschy
        Wenn du eine "Ganzzahl" erwartest, bist du mit intval auf der sicheren Seite.
        Er castet eh mit (int) auf Integer.

        Bei Formulareingaben sichere ich die Felder mit einem preg_match() ab so kann mir da meines Wissens ja keiner mehr Probleme machen.
        Ich bezweifle, dass du mit preg_match alleine immer auf der sicheren Seite bist. Verwende noch zusätzlich real_escape_string oder noch besser Prepared Statements.
        Zuletzt geändert von h3ll; 11.06.2008, 19:47.

        Kommentar


        • #5
          Hallo!

          Ich nutze natürlich mysql_real_escape_string

          Hier mal ein Beispiel Script wenn ich was in eine DB eintrage!

          PHP-Code:
          if(isset($_POST['send']))
          {
              
          $link "<a href=\"news_post.php\">Zurück</a>";    
              if(
          get_magic_quotes_gpc())
              {
                  
          $poster stripslashes($_POST['poster']);
                  
          $titel stripslashes($_POST['titel']);
                  
          $email stripslashes($_POST['email']);
                  
          $text stripslashes($_POST['text']);
                  
          $cat stripslashes($_POST['cat']);
                  
          $url stripslashes($_POST['url']);
                  
          $allowkom stripslashes($_POST['allowkom']);
              }
              
          $poster mysql_real_escape_string($_POST['poster']);
              if(empty(
          $poster) && !preg_match("#^([0-9a-zäöü _-]+)$#i",$poster))
              {
                  echo 
          msgBoxAdmin("Der Poster fehlt oder hat verbotene Zeichen nur Zeichen a-z A-Z 0-9 _- und Leerzeichen erlaubt!<br>".$link);
                  exit();
              }
              
          $titel mysql_real_escape_string($_POST['titel']);
              if(empty(
          $titel) && !preg_match("#^([0-9a-zäöü _-]+)$#i",$titel))
              {
                  echo 
          msgBoxAdmin("Der Titel fehlt oder hat verbotene Zeichen nur Zeichen a-z A-Z 0-9 _- und Leerzeichen erlaubt!<br>".$link);
                  exit();
              }
              
          $email mysql_real_escape_string($_POST['email']);
              if(empty(
          $email) && !eregi("^[a-z0-9]+([_.-][a-z0-9]+)*@([a-z0-9]+([.-][a-z0-9]+)*)+\\.[a-z]{2,4}$",$email))
              {
                  echo 
          msgBoxAdmin("Das E-Mail Format ist nicht korrekt!<br>".$link);
                  exit();
              }
              
          $text mysql_real_escape_string($_POST['text']);
              if(empty(
          $text) && strlen($text)<15)
              {
                  echo 
          msgBoxAdmin("Der Newstext fehlt oder hat weniger als 15 Zeichen!<br>".$link);
                  exit();
              }
              
          $cat mysql_real_escape_string($_POST['cat']);
              if(empty(
          $cat) && !preg_match("#[0-9]#",$cat))
              {
                  echo 
          msgBoxAdmin("Die Kategorie ist nihct korrekt,keine Zahl!<br>".$link);
                  exit();
              }
              
          $allowkom mysql_real_escape_string($_POST['allowkom']);
              if(empty(
          $allowkom) && !preg_match("#[0-9]#",$allowkom))
              {
                  echo 
          msgBoxAdmin("Die Kommentarerlaubnis ist nihct korrekt,keine Zahl!<br>".$link);
                  exit();
              }
              else
              {
                  
          $url mysql_real_escape_string($_POST['url']);
                  
          $datum time();
                  
          $sqlbefehl ="
                              Insert Into 
          $tab_news
                                  (
                                      catid,
                                      titel,
                                      poster,
                                      email,
                                      allowkom,
                                      url,
                                      text,
                                      datum
                                  )
                          VALUES    
                                  (
                                      '
          $cat',
                                      '
          $titel',
                                      '
          $poster',
                                      '
          $email',
                                      '
          $allowkom',
                                      '
          $url',
                                      '
          $text',
                                      '
          $datum'
                                  )
                              "
          ;
                  
          $result mysql_query($sqlbefehl)or die(mysql_error());
                  
          header("Location: modul_news.php");
              }

          So mache ich es wenn ich was eintrage in eine DB!
          Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
          http://www.lit-web.de

          Kommentar


          • #6
            Deine Stripslashes sind sinnlos, weil du die Variablen danach erst wieder überschreibst.

            Kommentar


            • #7
              und mysql_real_escape_string führst du zu früh aus.

              strlen($text) würde z.B. die Escape-Zeichen mitzählen...
              Außerdem ist das zuweisen in eine seperate Variable eigentlich auch überflüssig.

              Kommentar


              • #8
                Wie müsste es denn zum Beispiel richtig aussehen?

                Dankeschön
                Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                http://www.lit-web.de

                Kommentar


                • #9
                  Auf was beziehst du dich? Kann unmöglich sein, dass du mit keinem unserer Hinweise etwas anfangen kannst.

                  Wenn du fälschlicherweise die Variablen überschreibst, wäre es richtig sie nicht zu überschreiben.

                  Wenn du mysql_real_escape_string zu früh ausführst, wäre es sinnvoll es später zu nutzen, am besten so spät wie möglich.

                  Wenn du eine extra Variable definierst, obwohl das eigentlich überflüssig ist, wäre es besser die Variable nicht zu definieren.

                  Jetzt bitte nochmal mit ein bisschen Eigeninitiative.

                  Kommentar


                  • #10
                    Das einzige wo ich nur ins grübeln komme also es nicht so ganz verstehe ist das mit dem überschreiben.
                    Weil mit get_magic_quotes_gpc prüfe ich ja ob magic quotes on sind wenn ja reagieren ich mit einem stripslashes. Ich weis nicht wo ich die Variablen noch mal überschreibe da die Variablennamen ja nicht neu benenne!

                    Den Rest habe ich geschnallt,das mysql_real_escape_string werde ich erst direkt beim eintragen einsetzen.
                    Zuletzt geändert von litterauspirna; 11.06.2008, 21:43.
                    Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                    http://www.lit-web.de

                    Kommentar


                    • #11
                      Ähm,

                      $poster = mysql_real_escape_string($_POST['poster']);

                      Kommentar


                      • #12
                        Also wäre es richtiger so hier?

                        PHP-Code:
                        VALUES    
                                                
                        (
                                                    
                        '".mysql_real_escape_string($cat)."',
                                                ) 
                        So würde ich sie ja nicht mehr überschreiben?
                        Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                        http://www.lit-web.de

                        Kommentar


                        • #13
                          PHP-Code:
                          ".mysql_real_escape_string($_POST['cat'])." 
                          Erwartest du in $_POST['cat'] eine Ganzzahl ?
                          PHP-Code:
                          ".intval($_POST['cat'])." 
                          4cms.de

                          Kommentar


                          • #14
                            Also wäre es richtiger so hier?
                            Das eine hat doch mit dem anderen nichts zu tun! Du hast doch schon geschrieben, dass du erst später escapest. Aber die oben gepostete Stelle existiert vermutlich in ähnlicher Form immer noch. (ansonsten hättest du ein register globals problem). Folglich überschreibst du den wert auch immer noch.


                            Original geschrieben von bUTschy
                            PHP-Code:
                            ".mysql_real_escape_string($_POST['cat'])." 
                            Erwartest du in $_POST['cat'] eine Ganzzahl ?
                            PHP-Code:
                            ".intval($_POST['cat'])." 
                            Laut der Prüfung wird ein String erwartet, der eine Zahl enthält.
                            PHP-Code:
                            preg_match("#[0-9]#",$cat)) 
                            Zuletzt geändert von TobiaZ; 11.06.2008, 21:58.

                            Kommentar


                            • #15
                              Ich habe grad ein Brett vorm Kopf mit dem überschreiben,steinigt mich!

                              Wo müsste ich da richtiger Weise die Prüfung auf get_magic_quotes_gpc machen und das stripslashes richtig einsetzen so das das dann nicht mehr überschrieben wird?
                              Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                              http://www.lit-web.de

                              Kommentar

                              Lädt...
                              X