Philipp Hasenfratz: Datenbanken / Sicherheit

Beitrag lesen

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.