Mar 31 2007

XSS schutz dank htmlentities?

Tag: Web Application Security,XSSThe-Wildcat @ 01:44

Reicht die php Funktion htmlentities wirklich aus um vor XSS zu schützen?
Die Antwort, definitiv nicht 100%ig.
Man betrachte die Angaben unter dem obigen Link zu php.net.
Dort habt Ihr erstens eine Liste der verfügbaren Konstanten um zum Beispiel double quotes {“} oder single quotes {‘} umzuwandeln oder eben nicht umzuwandeln. Wobei man sagen muss, das single quotes standartmäßig nicht umgewandelt werden.

Was aber noch viel wichtiger ist, sind die unterstützten Zeichensätze und dort mangelt es.
Ein Beispiel welches ich hier gefunden habe zeigt z.B. ein proof of concept mit UTF-7

<?php
header('Content-Type: text/html; charset=UTF-7');
$string = "<script>alert('XSS');</script>";
$string = mb_convert_encoding($string, 'UTF-7');
echo htmlentities($string);
?>

Scriptdemonstration

Probiert es aus und Ihr werdet sehen, htmlentities arbeitet nicht bei UTF-7 . Natürlich werden mit folgenden PHP Versionen auch die unterstützten Zeichensätze zunehmen, aber man sollte sich vielleicht darüber gedanken machen diese Sachen selbst in die Hand zu nehmen und nicht durch eine vorhandene Funktion regeln zu lassen, wenn man sie nicht genau kennt :mrgreen: .
Hier findet ihr noch einen Guide zu den Zeichensätzen und den dazugehörigen Artikel von ha.ckers.org.

Fazit:

  1. htmlentities bietet keinen 100%igen Schutz, aber was ist schon 100%ig ;)
  2. Man sollte den Anwendungsfall prüfen und notfalls jemand fragen der sich auskennt,
  3. aber wenn man die eigenheiten der Funktion genau kennt, sollte daraus keine Lücke werden.
  4. Was die Funktion nicht abdeckt muss dann selbst in die Hand genommen werden.

One Response to “XSS schutz dank htmlentities?”

  1. Michael Schratz says:

    Hallo,

    habe das mal durchgespielt, das obige Beispiel lässt sich absichern durch Verwenden der Funktion ctype_alnum(). Den Punkten 1-4 stimme ich zu. Eine lesenswerte Zusammenfassung der Angriffsmöglichkeiten auf PHP-Anwendungen fand ich hier:

    http://www.secologic.org/downloads/php/051123_eurosec_schulungsfolien_sichere_programmierung_von_PHP.ppt

    Grüße Michael

Leave a Reply

You must be logged in to post a comment. Login now.