dedlfix: if/else Anfängerfrage

Beitrag lesen

echo $begrüßung;

Und eine Frage hätte ich dann noch. Wie kann ich es vermeiden, dass jemand HTML-Tags in das Formular eingibt und die dann womöglich meine Seite kaputt machen?

Sowas nennt man dann Cross Site Scripting (XSS), wenn jemand beliebigen Code in die Seite einschmuggeln kann. Der Programmierer hat an dieser Stelle den Kontextwechsel übersehen: Die Daten in einem String sollen in den Kontext HTML gebracht werden. Was muss man bei HTML beachten? Man muss HTML-eigene Zeichen maskieren. Das ist eigentlich schon alles. PHP stellt dafür die Funktion htmlspecialchars() bereit. Alle Daten, die du in einen HTML-Code einfließen lassen möchtest, solltest du damit behandeln.

Damit kommt beispielsweise ein <script> im Browser des Benutzers als &lt;script&gt; an und wird von ihm als <script> angezeigt, und nicht als Script-Element angesehen und entsprechend behandelt. Damit ist die Angelegenheit zwar entschärft, aber unschön sieht das trotzdem aus. Wenn du genau weißt, dass nur bestimmte Zeichen in einer Eingabe sinnvollerweise vorkommen dürfen - beispielsweise < und > in einem Namen nicht vorkommen - dann solltest du solche Werte bei der Entgegennahme prüfen und ablehnen. Gib das Eingabeformular zusammen mit den fehlerhaften Werten (htmlspecialchars-Behandlung nicht vergessen!) solange wieder an den Beutzer zurück, bis du mit seinen Eingabedaten zufrieden bist. Diese Technik nennt man auch Affenformular.

Eine andere Möglichkeit wäre, einfach ohne zu fragen alle "bösen" Zeichen zu entfernen. (Ich mag diesen Ansatz aber nicht, weil der Benutzer nicht nachvollziehen kann, warum seine Eingabedaten verändert werden.) strip_tags() entfernt schon mal alle HTML-Tags. Allerdings arbeitet es zu gründlich und entsorgt sämtliche zwischen < und > stehende Zeichen, auch das < 5 > in einer Formel wie 3 < 5 > 4. Das wäre nicht in jedem Fall gewollt.

echo "$verabschiedung $name";