Download 3. Auflage
Transcript
4.12 XSS verbieten, HTML erlauben – wie? Beim Überfliegen des Abschnittes über das XSS Cheat Sheet haben Sie vermutlich festgestellt, dass es eine große Zahl von Möglichkeiten gibt, XSS-Angriffe auf Ihre Skripte auszuführen – und dass Sie mit einem einzigen Filter nur eine kleine Untermenge dieser Angriffe finden und entfernen können. Die ideale Strategie für einen XSS-Filter, der selektiv HTML zulässt, wäre daher eine Whitelist, die ausschließlich die Tags und Attribute im Quellcode belässt, die keinen schädlichen Code enthalten können. Eine solche Whitelist wird von der Anwendung »HTML Purifier« implementiert, die wir Ihnen im nächsten Abschnitt vorstellen. Für bestimmte Fälle kann es jedoch nützlich sein, einen Blacklist-basierten HTML-Filter zu kennen, der als verdächtig bekannte Elemente aus HTML-Code entfernt. Bevor Sie die tatsächliche Entfernung XSS-verdächtiger Tags und Attribute vornehmen, können Sie zunächst Ihre eigene Tag-Whitelist erstellen, die nur gewollte HTML-Tags enthält. Nicht für Benutzereingaben sinnvoller Markup-Code wie <META>, <script> und <BODY> wird dann von PHP entfernt. Die PHP-Funktion strip_tags() verfügt über eine solche WhitelistFunktionalität, mit der Sie zunächst alle HTML-Tags entfernen können, die Ihr Skript nicht benötigt. Sie sollten jedoch darauf achten, dass diese Funktion keine Syntaxprüfung vornimmt. Halboffene Tags oder inkorrekte HTML-Syntax können dazu führen, dass mehr Inhalt entfernt wird als erwartet. Möchten Sie alle HTML-Tags bis auf <a>, <div>, <img> und <pre> verbieten, erreichen Sie das mit dem Funktionsaufruf $stripped_html = strip_tags($html, "<a><div><img><pre>"); Aus einem HTML-Block wie <div> <a href="http://www.foobar.de/"> <u>foo</u> </a> <b>blah</b> <pre>fasel</pre> wird mit der oben genannten Funktion Folgendes: <div><a href="http://www.foobar.de/"> <u>foo</u> </a>blahfasel Nachdem Sie alle Tags entfernt haben, die in jedem Fall unerwünscht sind, ist es Zeit, mit einem geeigneten Parser sämtliche restlichen unerwünschten Attribute und Tags zu entfernen. Die Klassensammlung SafeHTML3 verfügt über einen solchen Parser auf Basis der PEARKlasse XML_HTMLSax34 und gilt als ein gutes Mittel gegen XSS. 3. 4. http://pixel-apes.com/safehtml/ http://pear.php.net/package/XML_HTMLSax3 99