Frage

Ich habe einige html (in diesem Fall via TinyMCE erstellt), die ich auf einer Seite hinzufügen möchte. Jedoch aus Sicherheitsgründen, ich will nicht nur drucken, alles, was der Benutzer eingegeben hat.

Kennt jemand eine TemplateTag (einen Filter, vorzugsweise), die nur eine sichere Teilmenge von HTML erlauben wird, gemacht werden?

Ich weiß, dass Abschlag und andere dies tun. Sie können aber auch zusätzliche Markup-Syntax hinzufügen, die für meine Nutzer verwirrend sein könnte, da sie einen Rich-Text-Editor verwenden, die nicht über Abschlags nicht kennt.

War es hilfreich?

Lösung

Es gibt RemoveTags , aber es ist eine schwarze Liste zu setzen Ansatz die nicht-Tags zu entfernen, wenn sie wie die wohlgeformten Tags nicht genau aussehen Django erwartet, und natürlich, da es nicht Attribute zu entfernen, nicht versuchen, es ist völlig anfällig für die 1000 anderen Möglichkeiten der Skript-Injektion, die nicht tun beinhaltet den <script> Tag. Es ist eine Falle, während die Illusion von Sicherheit bietet eigentlich gar keine wirkliche Sicherheit.

HTML-sanitisation Ansätze basieren auf regex Hacking sind fast zwangsläufig insgesamt scheitern. Mit einem echten HTML-Parser ein Objektmodell für die bereitgestellte Inhalte zu bekommen, dann Filtern und in einem intakten Format Re-Serialisierung, ist in der Regel der zuverlässigste Ansatz.

Wenn Rich Text Editor Ausgaben XHTML ist es einfach, benutzen Sie einfach minidom oder etree das Dokument dann zu analysieren, zu Fuß über allem aber bekannt-gute Elemente und Attribute zu entfernen und schließlich konvertiert zurück in sicherer XML. Wenn auf der anderen Seite ist es HTML spuckt, oder ermöglicht dem Benutzer die Eingabe von reinem HTML, müssen Sie möglicherweise so etwas wie BeautifulSoup auf, es zu benutzen. Siehe diese Frage für einige Diskussion.

Filtering HTML ist ein großes und kompliziertes Thema, weshalb viele Menschen die Text-mit-restriktiven-Markup-Sprachen bevorzugen.

Andere Tipps

Mit HTML Purifier, html5lib oder einem anderen Bibliothek, die tun HTML sanitization gebaut wird.

Sie können removetags verwenden Liste der Tags festlegen entfernen:

{{ data|removetags:"script" }}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top