Hallo,
ich bin auf folgendes Problem gestoßen. Ich habe eine Tabelle mit zwei Feldern (id, text). Folgende Anfrage führt auf Grund eines Fehlers dazu, dass die ganze Tabelle überschrieben wird:
$text='Beipieltext mit "doppelten" Hochkommas, die nicht über addslashes escaped worden.';
$ergebnis=mysql_query('UPDATE tabelle SET text="'.$text.'" WHERE id=1 LIMIT 1', $verbindung);
Nach diese Anweisung wurden alle Datensatze der Tabelle im Feld "text" mit "Beipieltext mit " überschrieben, da der mysql_query den Ausdruck nur bis dahin auswertet, dann scheinbar abbricht, aber dennoch die Anweisung ausführt. (mysql_error() würde eine Fehlermeldung bringen, ich weiß...)
Das Limit und die id Bedingung werden entsprechend ignoriert.
Kann man sich irgendwie dagegen schützen? Ich sehe die Gefahr vorallem darin, dass ein Nutzer von außen z.B. über ein Formular Daten einschleußen könnte, die dann die ganze Tabelle überschreiben. Ich weiß, dass die Browser normalerweise automatisch escapen, aber das kann man ja auch mit entsprechenden Tricks übergehen...
Ich kann ja schlecht nicht nochmal über alle eingehenden Formularstrings mit addslashes drübergehen...
Eine Variante wäre zunächst stripslashes() und dann gleich wieder addslashes zu nehmen: aber gibt es keine elegantere Lösung für das Problem???
Danke im Vorraus für eure Hilfe.
Mit bestem Gruß
Michael