dedlfix: OOP: Behandlung von Benutzereingaben für Konstruktor

Beitrag lesen

Tach!

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.

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.

dedlfix.