Halihallo
Mein Skript erhaelt Eingaben ueber ein Formular, unter anderem 'nickname'.
Ich suche dann aus meiner user-db die Daten zum entsprechenden 'nickname' raus, á la:
'SELECT id FROM table WHERE userName = '.$nickname;
Frage: bestehen da irgendwelche Sicherheitsprobleme, z.B. wenn der User direkt an seinen Namen noch ein paar SQL-Befehle dranhaengt?
Ne, es sei denn, dass man mit ';' separiert mehrere SQL-Queries abfragen könnte. Ist aber nicht so... Sonst würde der Nickname "blabla; DELETE * FROM table"... Naja... selbsterklärend...
Was kann ich dagegen tun?
Nicknames haben z. B. keine Leerzeichen und sind meist auch nicht länger als 30 Zeichen => überprüfen des Inhaltes und Kriterien für "ungültige Nicknames" festlegen. Wenn du es sicher haben willst:
$q = 'SELECT id FROM table WHERE userName="'.$nickname.'"';
wobei du alle '"' in $nickname und sonstige "komische" Zeichen kodierst (oder z. B ';' gar nicht erlaubst oder kodierst), somit wird der SQL-Parser den Nickname auch als solchen behandeln und der böse Bub, der die Site knacken will, wird scheitern.
Viele Grüsse
Philipp
PS: Fazit: Wenn du userName="bla" (die " sind wichtig!) verwendest und die " im Nickname selber kodierst '"', dann wirst du keine Probleme haben.