Kackfohgel: OOP: Behandlung von Benutzereingaben für Konstruktor

Beitrag lesen

Hallo dedlfix!

Wenn eine Übergabe "SELECT * FROM tab WHERE 'name' = $name" eine Sicherheitslücke ist, könnte man ja vlt. auch mit new Benutzer($name); oder tuWas($name); etwas anstellen.

Nein. (Gedanklich füge ich mal um $name noch Anführungszeichen hinzu, die du verutlich vergessen hast.) Im SQL-Statement kann ein in $name enthaltenes Anführungszeichen den durch das Anführungszeichen vor $name begonnenen String beenden. Das muss verhindert werden, indem die Anführungszeichen in $name maskiert werden. Ansonsten wäre das die SQL-Injection-Lücke. Wenn PHP allerdings intern mit Strings jongliert, gibt es keine Zeichen, die darin irgendeine Sonderfunktion hätten. Bei anderen Programmiersprachen wäre das zumindest das 0-Byte, das als String-Ende-Zeichen gewertet wird. Wenn du denkst, schon die Übergabe könnte ein Problem auslösen, dann ist das beim Konstruktor schon zu spät, denn Übergaben fanden bereits vorher in Form anderer Zuweisungen statt. Auch das Eintragen in das $_POST/$_GET-Array bevor das Script startet ist eine solche.

Danke für diese ausführliche Beschreibung. Dadurch wird mir das wirklich sehr gut veranschaulicht. Insbesondere mit den letzten beiden Sätzen.

Darf/sollte ich eine Postvariable unbearbeitetet an den Konstruktor übergeben?
Das kommt auf die Aufgabe der Klasse an. Klassen, die allgemein Daten verarbeiten, bekommen immer Rohdaten.
Gut:) Hast du vlt. noch ein Beispiel, wo man das nicht so machen sollte?

Sicherheitstechnisch spricht in keinem Fall etwas dagegen. Die Bedenken waren nur fachlicher Natur und richtigen sich nach der konkreten Aufgabe der Klasse.

Gut, das hatte ich jetzt so aus deinem ersten Post hergeleitet. Wollte aber sicherheitstechnisch auf Nummer sicher gehen :-)

Freundliche Grüße
Kackfohgel