3:
Weihnacksmann, o Weihnacksmann,
was hast du nur getan?
Schau dir deine Seite an,
versinke bloß in Scham!

Hacked by xlol l33t doppelrofl scr1ptk166y


Quietschend rannte Wullebob der Wichtelzwerg durch die Gänge der Nordweih24 GmbH und schlug an alle Türen, die sich nicht rechtzeitig wehrten. „Wir sind gehackt, wir sind gehackt“, rief er und aus den nebengelegenen Büros trafen ihn den besorgten und alarmierten Blicke seiner Kollegen. „Wir sind gehackt!“, wiederholte er immerfort, ehe er endlich das Büro des IT-Wichtels erreicht hatte. „Wir sind…“,
„Ist ja gut!“, unterbrach ihn barsch der IT-Wichtel, der in diesem Moment aus seiner Tür trat. „Ich habe es ja gehört. Und nun nimm dir mal einen Kaffee und setze dich. Du musst ja nicht die gesamte Firma zusammen schreien.
„Aber… wir…”, begann Wullebob, senkte dann aber betroffen den Kopf und zapfte sich kleinlaut einen Kaffee ab, als er den strengen Blick des IT-Wichtels bemerkte.

Ohne den zitternden Kollegen weiter zu beachten, machte sich der IT-Wichtel an die Arbeit. Tatsächlich. Auf der Website der Firma prangte in blinkender Schrift das Logo des Hackers, der sich wohl gerade, wie der IT-Wichtel vermutete, stolz seinen Kindergartenfreunden präsentierte. Ein kurzer Blick in den Quellcode der gehackten Seite brachte Klarheit in die Sache. Eine XSS-Lücke, das hatte ihm noch gefehlt. Missmutig betrachtete er den Quellcode seines eigens für diese Seite geschriebenen HTML-Verstümmelers. Nun musste er feststellen, wie lückenhaft dieser war. Er hatte zwar alle SCRIPT-Tags entfernt und auch Iframes nicht erlaubt, angesichts der vom Angreifer eingefügten nicht geschlossenen HTML-Tags und der onmouseover-Attribute mutete diese Maßnahme aber schon fast lächerlich an. Vielleicht hätte er doch BB-Code nutzen sollen oder gleich [MAN]strip_tags[/MAN]()? Nein, die Eingabe von HTML hatte unbestreitbare Vorteile. Es handelte sich um eine standardisierte Markup-Sprache, war recht flexibel und bot einfach mehr als Möchtegern-HTML. Die Methode mit strip_tags() behagte ihm allein schon aus diesem Grunde nicht. Für die in Python generierten Feeds nutzte er mittlerweile den Universal Feed Parser, der seine Sache ziemlich gut machte, doch was war jetzt mit dem in PHP geschriebenen und gerade gehackten Gästebuch, das auf der Startseite eingebunden war?
Der IT-Wichtel vertiefte sich in die Recherche nach Lösungen. Ein Geräusch schreckte ihn plötzlich auf. Wullebob war eingeschlafen und vom Stuhl gefallen, der inzwischen erstarrte Kaffee auf seiner sich regelmäßig hebenden und senkenden Brust zerbröselt. Dass dieser Wichtelzwerg immer noch hier saß… den hätte der IT-Wichtel fast vergessen. Das ging ihm jedes Mal so, wenn er in seine Arbeit vertieft war. Eines Tages wäre draußen fast der Pizza-Bote erfroren, weil er das Klingeln nicht gehört hatte. Glücklicherweise hatte jener die Pizza in einen gut isolierenden Karton verpackt, sodass sie noch etwas warm gewesen war (im Gegensatz zum Pizza-Boten, der überdies recht kühl gewirkt hatte, nahezu erkältend).

Nachdem er Wullebob sanft vor seiner Büro-Tür den sanften Händen der Putzfrau überantwortet hatte, setzte er sich wieder an seinen Schreibtisch und suchte weiter. Da! Endlich hatte er gefunden, wonach er gesucht hatte: HTML Purifier, eine PHP-Klasse, die anhand von Whitelists zuverlässig bösartige Skripteinlagen erkennen und entfernen konnte. Auch ungültig verschachteltes HTML erkannte diese zuverlässig, eine Gefahr, die er (neben vielen anderen) anfangs außer Acht gelassen hatte. HTML Purifier bot zudem eine überwältigende Fülle an Konfigurationsmöglichkeiten, die es ihm erlaubten, das HTML ganz nach seinen Wünschen zu „sanitizen“, wie er auf Neuwichtelisch zu sagen pflegte. Sogar ID-Attribute konnte er zulassen oder verweigern und sogar bearbeiten und der Zerstörung seiner schönen Ankerlinks durch doppelte IDs vorbeugen.Ein kurzer Code reichte
PHP-Code:
$cfg->set('Attr.EnableID'true);
$cfg->set('Attr.IDPrefix''gbcontent_'); 
und schon bekamen alle verwendeten IDs das Präfix gbcontent_.
Schnell band er die Klasse ein und reinigte mit ihr die Ausgabe des Gästebuchs. Um eine ausführliche Konfiguration würde er sich später kümmern.
PHP-Code:
require_once 'HTMLPurifier.auto.php';

$cfg HTMLPurifier_Config::createDefault();
$cfg->set('Core''Encoding''UTF-8');
$cfg->set('HTML''Doctype''XHTML 1.0 Strict');
$cfg->set('Attr.EnableID'true);
$cfg->set('Attr.IDPrefix''gbcontent_');
$cfg->set('HTML''TidyLevel''heavy');

$purifier = new HTMLPurifier($cfg);

// ...

print $purifier->purify($gbcontent); 
„It's as simple as that“, murmelte der IT-Wichtel, lächelte in seinen künstlichen Bart und lehnte sich zurück. Zeit für eine Mahlzeit, wo nur der Pizzabote wieder blieb…?