Python-Bibliothek Bleach 3 hat html5lib an Bord

Die Library zum Bereinigen von HTML-Inhalten beseitigt zudem im aktuellen Release einige Probleme im Umgang mit HTML-Tags.

In Pocket speichern vorlesen Druckansicht 4 Kommentare lesen
Python-Bibliothek Bleach 3 hat html5lib an Bord
Lesezeit: 2 Min.
Von
  • Rainald Menge-Sonnentag

Die Mozilla-Community hat Bleach 3.0 veröffentlicht. Die Python-Bibliothek, deren Name sich zur Funktion passend mit Bleiche übersetzen lässt, bereinigt HTML-Inhalte aus potenziell unsicheren Quellen. Im Zentrum des jüngsten Release steht vor allem die Anbindung an html5lib sowie das Beseitigen einiger Probleme, die sich im Zuge des für Bleach 2.0 neu geschriebenen Codes zum Parsen von HTML eingeschlichen hatten.

Die Abhängigkeiten zu unterschiedlichen Versionen von html5lib haben den Entwicklern wohl stets Kopfzerbrechen bereitet. Daher haben sie nun Version 1.0.1 der Bibliothek in Bleach integriert und ein Shim hinzugefügt. Letzteres dient der Weitergabe der API-Aufrufe und ermöglicht so eine saubere Trennung der beiden Bibliotheken. Dadurch soll unter anderem das Update auf jüngere Releases von html5lib relativ einfach möglich sein. Entwickler, die Bleach einsetzen, müssen sich zudem keine Gedanken mehr über mögliche Abhängigkeiten und passende Versionen der HTML-Bibliothek machen.

Version 2.0 brachte mit frischem Code auch einige Probleme, da das Bereinigen nicht mehr während des Parsens des HTML-Codes erfolgte, sondern erst im Anschluss daran. Der Parser hat dabei selbst eine Bereinigung versucht, was unter anderem bei Textelementen, die den Aufbau von HTML-Tags haben, aber keine regulären Tags sind, dazu führte, dass Bleach als Endergebnis den vermeintlichen HTML-Tag zunächst öffnend und dann schließend erstellte, wie folgendes Beispiel zeigt:

>>> import bleach
>>> bleach.clean('This is terrible.<sarcasm>')
'This is terrible.&lt;sarcasm&gt;&lt;/sarcasm&gt;'

Der Tokenizer von Bleach 3.0 erkennt unerlaubte Tags und verarbeitet damit das obige Beispiel korrekt:

>>> import bleach
>>> bleach.clean('This is terrible.<sarcasm>')
'This is terrible.&lt;sarcasm&gt;'

Weitere Details lassen sich dem Bleach-Blogbeitrag entnehmen, aus dem das obige Codebeispiel stammt. Im Bleach-Repository auf GitHub findet sich neben dem Quellcode auch ein Link zur Dokumentation. (rme)