Original geschrieben von Wolfsbein
Wenn man aber ein addslashes('#'); macht, dann kommt wieder ein # raus. Also sollte man es doch ersetzen?
Nur wenn Du eh schon Murks baust...
IMHO ist ein # in Feldern unproblematisch... sofern Du halt dafür sorgst das Felder in denen Du nur Zahlen erwartest nur Zahlen enthalten und Felder in denen Du Strings erwartest entsprechend in ' oder " eingeschlossen sind...
Der springende Punkt ist einfach ein sauberes Handling von Formulardaten... also keine ungeprüfte Übernahme von Form-Daten in Queries... also niemals
PHP:
$res=mysql_query('DELETE FROM irgendwo WHERE username = "'.$HTTP_POST_VARS['name'].'"');
sondern immer brav sowas im Stil von
PHP:
$uname = addslashes(HTTP_POST_VARS['name']);
$res=mysql_query('DELETE FROM irgendwo WHERE username = "'.$uname.'"');
...dann sollten sowohl ' und " oder # kein Thema sein. Man muss halt sorgfältig darauf achten, dass User nicht mit Tricks aus der SQL-Query ausbrechen können. Semikolons sind in der Regel mit MySQL auch absolut ungefährlich. Es sei denn man ist so verrückt und schreibt eine Funktion die explizit mehrere Queries per Semikolon getrennt abarbeiten kann. Von Haus aus ignoriert mysql_query allerdings so Konstrukte wie "SELECT * FROM tabelle; DELETE FROM tabelle WHERE a = 1" - da wirst Du nur einen MySQL-Error bekommen (siehe auch im Manual unter mysql_query)
Letztenendes ist der springende Punkt, Variablen nur in einem fest definierten Zustand ins Script zu bekommen und die entsprechend zu behandeln. Wenn Du Dich z.B. nicht drum kümmerst wie in der PHP.INI die entsprechenden Optionen gesetzt sind (z.B. magic_quotes_runtime) wirst Du immer in problematische Situationen kommen. Sei es weil Daten verloren gehen (weil Du z.B. ein unnötiges stripslashes machst) oder Queries unsicher werden (weil Du z.B. darauf vertraust das die Variablen schon mit Slashes reinkommen obwohl sie es nicht tun)
Schau Dir z.B. mal den Sourcecode von phpBB an. Die sorgen als allererstes dafür, dass egal wie magic_quotes runtime gesetzt ist, die Variablen die von aussen kommen, *immer* Slashes vor den Hochkommas, etc. haben.