kungschu: SQL-Injection

Beitrag lesen

Hallo Forum.

Obwohl ich schon einige Quellen (z.B.:http://de3.php.net/function.mysql-real-escape-string oder http://de.wikipedia.org/wiki/SQL-Injektion) besucht habe, bin ich mir noch nicht sicher, ob ich verstanden habe, wie ich eine SQL-Injection verhindere.

Ich habe es bisher so aufgefasst:

-Alle Daten, die ich in einer Datenbank ablegen möchte, sollte ich mit mysql_real_escape_string() maskieren.

-Damit es nicht zu "doppelter Maskierung" kommt, wende ich vorher stripslashes() an. (für den Fall, dass magic_quotes_gpc ON ist)

-Ein einfaches Beispiel (für einen sicheren Query) könnte also sein:

  
 <?php  
  
 if (isset($_POST['submit'])) {  
  
    $connection = mysql_connect('host','user','password');  
  
    $db = mysql_select_db('db', $connection);  
  
    if(get_magic_quotes_gpc()) {  
  
        $neuerInhalt = stripslashes($_POST['neuerInhalt']);  
  
    }else{  
  
        $neuerInhalt = $_POST['neuerInhalt'];  
  
    }  
  
    $neuerInhalt = mysql_real_escape_string($neuerInhalt);  
  
    $sql = "INSERT INTO table VALUES ('$neuerInhalt')";  
  
    mysql_query($sql, $connection);  
  
 }  
 ?>  

-Eine Abfrage zur Ausgabe von Daten (SELECT) muss grundsätzlich "nicht gesichert" sein.? Dabei besteht keine Möglichkeit zu einer SQL-Injection. (Es sei denn, auch eingegebene Daten, wie etwa Username und Password spielen eine Rolle)

Beuge ich somit einer SQL-Injection vor?
Sind alle "vier Punkte" richtig interpretiert?
Was sollte ich noch beachten?
Welche Fehler hat mein Beispiel-Code?

Herzlichen Dank.

MfG, Kungschu.