Gunnar Bittersmann: Formulardaten bauen mit JavaScript oder PHP

Beitrag lesen

@@ liebewinter

echo fread($read, 1024);

Das ist ein kapitaler Fehler: Du darfst niemals Daten, die potentiell gefährlich sein können (z.B. Eingaben von Nutzern) unbehandelt in HTML ausgeben. Sicherheitslücke!

Das mindeste, was du tun musst, wäre die Behandlung mit htmlspecialchars().

echo htmlspecialchars(fread($read, 1024));

Geht aber so nicht, weil da schon Markup drin ist, das du erhalten willst. Zwei Möglichkeiten:

1. Du wendest htmlspecialchars() schon beim Speichern der Nutzereingaben an:

fwrite($write, '<u><b>' . htmlspecialchars($name) . '</b></u><br>' . htmlspecialchars($text) . '<br>');

Das ist aber nicht das bevorzugte Vorgehen; man sollte den Kontextwechsel beachten, wenn der Kontext gewechselt wird. Also den Kontextwechsel zu HTML in dem Moment, wenn Daten in HTML ausgegeben werden.

2. Du speicherst Namen und Text getrennt, JSON bietet sich dafür an:

fwrite($write, json_encode(array('name' => $name, 'text' => $text)));

Bei der Ausgabe dann json_decode() und htmlspecialchars().

LLAP 🖖

--
„Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann