Sichere PHP Formulare – Schutz vor Cross-Site Scripting

Sichere PHP Formulare – Schutz vor Cross-Site Scripting

In einem meiner letzten Beiträge über Spam und PHP Formulare, habe ich eine Möglichkeit gezeigt, unliebsame Nachrichten von Bots zu verhindern. Neben dem abwehren von Bots ist es aber auch wichtig, seine Formulare sicher zu gestalten, und zu verhindern, dass mit deren Hilfe, die Seite angegriffen werden kann.

Wenn wir von einem Formular ausgehen, dass die Benutzereingabe auch wieder ausgibt, sei es bei einer fehlerhaften oder nicht vollständigen Eingabe, oder bei Erfolg als letzte Überprüfung, dann hat ein Angreifer die Möglichkeit, Schadcode auf der Seite einzuschleusen, da Daten an den Server gesendet, und dort verarbeitet werden.

Der erste Schritt zum sicheren Formular

Ein großer Schritt ist schon getan, wenn man im Formular statt auf die GET Methode, auf POST setzt. Alleine dadurch werden viele Versuche von Hackern verhindert. Aber auch ein POST-Formular kann noch weiter verbessert werden.

Es besteht die Möglichkeit, dass einfach ein Javascript in die Formularfelder eingetragen wird. Beim Senden und wieder ausgeben würde dieses dann ausgeführt werden. Um so etwas zu verhindern, greife ich auf htmlspecialchars zurück. Damit werden bestimmte Zeichen in HTML Code umgewandelt, und somit nur mehr angezeigt, nicht aber ausgeführt.

Zum Beispiel würde ein einfaches alert-Skript

<script type=“text/javascript“>alert(‚Error‘);</script>

in folgenden String umgewandelt und somit unschädlich gemacht werden:

&lt;script type=&quot;text/javascript&quot;&gt;alert(‚Error‘);&lt;/script&gt;

Wie man sieht, wurden die single-quotes noch nicht übersetzt. Aber auch das lässt sich ganz einfach per Zusatz-Flag ändern:

htmlspecialchars(„<script type=“text/javascript“>alert(‚Error‘);</script>“, ENT_QUOTES);

Mit Hilfe dieses einfachen Tricks lassen sich also Formulare vor XSS Attacken absichern. Wer erst gar nicht an den Server senden will, wenn ein Skript übermittelt wird, könnte auch noch auf meinen eingangs erwähnten Blogbeitrag zurückgreifen, und mit der dort vorgestellten Badwords-Überprüfung und folgenden Suchworten:

‚&#60;script‘, ‚&lt;script‘, ‚<script‘

bereits das absenden solcher Nachrichten unterdrücken. Auf htmlspecialchars sollte man aber trotzdem nicht verzichten. Sicher ist sicher!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.