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.