Hi!
mysql_query("INSERT INTO tabelle1 (
wert1
,wert2
) VALUES ('$value1', '$value2')")
In dem Fall gibt es natürlich spätestens dann ein Problem, wenn in einer der Variablen ein String enthalten ist, der einzelne Hochkommata (') enthält. Darüber hinaus *kann* diese Schreibweise Probleme erzeugen, wenn es möglich ist, mehrere SQL-Abfragen in einem Rutsch an die Datenbank zu schicken (Stichwort: "SQL-Injection"). Man stelle sich vor, in der Variablen namens "$value1" würde der String "foo', 'bar'); DELETE FROM tabelle1; --" stehen ... PHP würde daraus insgesamt folgenden String machen:
"INSERT INTO tabelle1 (wert1
,wert2
) VALUES ('foo', 'bar'); DELETE FROM tabelle1; --', 'hier würde der Wert der zweiten Variable stehen')"
Was würde die Datenbank wohl daraus machen?
Du willst das Prinzip erläutern, insofern ist das ok. Aber mit mysql_query() geht das so nicht. Das hast du ja schon angedeutet. Dieser Fall wird erst dann problematisch, wenn man mysqli_multi_query() nimmt. Allerdings muss man gar nicht solche destruktiven Fälle konstruieren, die meist nicht durchführbar sind. Es reicht, wenn man ein SELECT-Statement so manipulieren kann, dass es mehr oder andere Daten zurückliefert, als vorgesehen sind.
SELECT COUNT(*) FROM user WHERE user='$user' AND password='$password'
$user: admin' --
$password: egal
und schon ist man Admin ohne dessen Passwort zu kennen, wenn das abfragende Script nur prüft, ob das Ergebnis 1 ist. Oder man hängt mit UNION eine zweite Abfrage auf die Tabelle user der Datenbank mysql an. Hoffentlich hat der root ein Passwort, das nicht in den schon vorhandenen Rainbow-Tabellen auftaucht ...
Lo!