kostenloser Webspace werbefrei: lima-city


PHP: SQL-Injection

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    apollo13

    apollo13 hat kostenlosen Webspace.

    SO; um nicht immer viel schreiben zu m?ssen habe ich eine Funktion:

    function my_send_sql($sql)
    {
      $res = mysql_query($sql);
      $return $res;
    }


    Was soll ich vor $res = mysql_query($sql) einbauen um SQL-Injections zu vermeiden.

    Einmal
    $sql = strip_slashes($sql);
    und was noch? Oder reicht das schon?

    MfG apollo13
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. c*********c

    Um SQL-Abfragen zu "entsch?rfen" kannst Du mysql_real_escape_string verwenden -> http://de.php.net/manual/de/function.mysql-real-escape-string.php
  4. Autor dieses Themas

    apollo13

    apollo13 hat kostenlosen Webspace.

    danke, aber muss ich es mit sprintf mach:

    $query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
               mysql_real_escape_string($user),
               mysql_real_escape_string($password));


    bzw. warum wird hier sprintf verwendet un der string nicht einfach so zusammengestopelt ?

    MfG apollo13
  5. Du musst dazu die Post und Get Variablen mit der Funktion mysql_escape_string bearbeiten.

    Es n?tzt doch nichts wenn man das anch der Abfrage tut (soweit mein Informationsstand mit SQL Injections korrekt ist).

    Gru? Tobi
  6. Autor dieses Themas

    apollo13

    apollo13 hat kostenlosen Webspace.

    @ttobsen: hallo :wave:

    wird ja auch davor gemacht:
    das mysql_real_escape_string($user) und das:
    mysql_real_escape_string($password)

    geh?rt ja zum sprintf dazu und wird somit vor dem ausf?hren des Queries gemacht! Von dieser Sicht her passt alles, mich interessiert nur warum hier sprintf verwendet wird und der String nicht einfach so zusammengestoppelt wird ..

    MfG apollo13

    Beitrag ge?ndert am 25.12.2005 17:17 von apollo13
  7. Aso.

    Das wird wohl daran liegen das der Schreiber der Information diese Variante einfach komfortbaler fand.

    Gru? Tobi
  8. Autor dieses Themas

    apollo13

    apollo13 hat kostenlosen Webspace.

    Hmm, stimmt das k?nnte wirklich sein, ich hatte nur ?berlegt ob es einen Unterschied macht. Naja ich bleibe bei meinen zusammengestopelten Strings.

    MfG apollo13

  9. @ttobsen: hallo :wave:

    wird ja auch davor gemacht:
    das mysql_real_escape_string($user) und das:
    mysql_real_escape_string($password)

    geh?rt ja zum sprintf dazu und wird somit vor dem ausf?hren des Queries gemacht! Von dieser Sicht her passt alles, mich interessiert nur warum hier sprintf verwendet wird und der String nicht einfach so zusammengestoppelt wird ..

    MfG apollo13

    Beitrag ge?ndert am 25.12.2005 17:17 von apollo13

    Ich benutze auch die Funktionen "v-" und "sprintf ()", um ein MySQL Query zusammenzusetzen.
    Dazu benutze ich aber meine MySQL Klasse :
    // Auszug aus mysql.class.php
      function query ( $sql, $daten = false ) {
        $this -> add_query ();
        if ( $daten !== false ) {
          $daten = $this -> slashes ( $daten );
          if ( is_array ( $daten ) ) {
            $sql = vsprintf ( $sql, $daten );
          } else {
            $sql = sprintf ( $sql, $daten );
          }
        }
        
        $result = mysql_query ( $sql );
        if ( $result === false ) {
          trigger_error ( 'Es ist ein Fehler in einem Query in der Funktion "mysql::'.__FUNCTION__.' ()" entstanden! Das Query lautete : "'.cyCase_de_html ( $sql ).'"' );
        }
        return ( $result );
      }
    
    /* Etwaige MySQL Injection Versuche verhindern                          */
      function slashes ( $slashes ) {
        if ( is_array ( $slashes ) ) {
          foreach ( $slashes as $index => $slash ) {
            $slashes[$index] = mysql_escape_string ( $slash );
          }
        } else {
          $slashes = mysql_escape_string ( $slashes );
        }
        return ( $slashes );
      }


    Das Ganze ist eine Klasse, also kann man es nicht einfach so abkopieren!

    Der Aufruf sieht folgenderma?en aus :
    $mysql = new mysql ( $array_mit_verbindungs_daten );
    $result = $mysql -> query ( 'SELECLT `%s` FROM `%s` WHERE `hans` = \'%s%%\'', $spaltenname, $tabellenname, $vergleichswert ); 
    foreach ( $res as $result ) {
      print ( $res['hans'] );
    }


    Mich wundert, dass sowas nicht direkt in MySQL implementiert ist. :confused:
    W?re jedenfalls sicherer, als es dem PHP Programmierer zu ?berlassen.

    MfG Lucas
  10. Autor dieses Themas

    apollo13

    apollo13 hat kostenlosen Webspace.


    Das Ganze ist eine Klasse, also kann man es nicht einfach so abkopieren!


    Glubst du wirklich ich h?tte nichts besseres zu tun als deine Klasse zu kopieren :biggrin:. Warum musst du das dazuschreiben, die N00bs die einfach alles kopieren w?ren dann ganz verzweifelt, dass es nicht gehen w?rde und der Rest schreibt sich sowas eh selber ....

    MfG apollo13


  11. Das Ganze ist eine Klasse, also kann man es nicht einfach so abkopieren!


    Glubst du wirklich ich h?tte nichts besseres zu tun als deine Klasse zu kopieren :biggrin:. Warum musst du das dazuschreiben, die N00bs die einfach alles kopieren w?ren dann ganz verzweifelt, dass es nicht gehen w?rde und der Rest schreibt sich sowas eh selber ....

    MfG apollo13

    :confused::confused::confused:
    Ich wei? zwar, was du sagen willst, aber aus deinem Post kann man das nicht so ganz erkennen. ^^

    Der "Rest" schreibt sich das nicht unbedingt neu, denn warum soll man das Rad neu erfinden?
    Ich habe es zwar neu geschrieben, aber das liegt daran, dass ich dadurch lernen wollet und daran, dass ich keine vern?nftige MySQL Klasse die SQL-Injection verhindert gefunden habe.

    MfG Lucas
  12. Autor dieses Themas

    apollo13

    apollo13 hat kostenlosen Webspace.

    hmm, stimmt etwas lasch ausgedr?ckt, meinte ja nur, dass der der nicht einer der Kopierer ist, es sich in seine Klasse einbaut und der Rest verzweifelt. Aber das hast du ja eh richtig erkannt...

    MfG apollo13
    P.S.: Ich habe einfach was gegen Leute die einfach nur Code kopieren und wenn er nicht geht sind die anderen schuld ...
  13. Also ich habe auf meinem Rechner immer mehrere PHP LIBRARIES die meist aus classes bestehen die von einem anderen Programmierer geschrieben wurden ;-)
    z.B. cphplib nutze ich weil ich nicht die DB-Session + Form tests usw. nicht selber programmiern w?rde, weil es halt ewig dauern w?rde ;-)
    Dazu kommt das viele classes einfach kopiert werden um schneller Projecte umzusetzen ;-)
    Bei Privatseiten ist es halt schon, dass es nur Copyn00bs und Freaks die alles selber progn gibt ^^

    mfg
    Next Look

    P.S.: Ist meine Meinung dazu.
  14. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!