Datum: 27.11.2008
, Kategorie:
PHP,
Scripte
Dass Benutzereingaben kontrolliert und gefiltert werden müssen ist nicht neu. Machen wir bei allen unseren Scripten so. Meistens werden die Daten bei der Ausgabe an den Browser mit Hilfe von htmlentities() "gesichert". Alles, was möglich ist, wird dabei in HTML-Entities umgewandelt. > wird zu >, " wird zu ", und so weiter.
Als wir das Kommentar-Script seinerzeit entwickelten, haben wir die Umwandlung an den Anfang gesetzt - die Daten kamen so schon konvertiert in der Datenbank an. Irgendwann zwischen damals und heute haben wir htmlentities() durch strip_tags() ausgetauscht. Warum, weiß keiner mehr so genau. Normalerweise verwenden wir eine Kombination aus beiden Funktionen, um ganz sicher zu gehen.
strip_tags() allein zu verwenden, sollte sich als großer Fehler herausstellen. strip_tags() entfernt, wie der Name schon sagt, HTML-Tags und auch PHP-Tags. Alles andere - JavaScript-Code oder CSS-Styles zum Beispiel - bleibt bestehen. Resultat war, dass Nutzer sich bei uns meldeten. Hacker hätten Code eingeschleust und die gesamte Seite zu einem Link gemacht. Über den Admin-Bereich konnte der Kommentar noch nicht einmal gelöscht werden, da das Script gar nicht mehr auf die anderen Links reagierte.
Das Update und Veröffentlichung im Forum war schnell erledigt. Schließlich haben wir ja schon Erfahrung damit. ;-)