2017-03-10 2 views
3

Ich möchte Sicherheitslücken zur XSS/JavaScript-Injektion in einer Webanwendung entfernen, wo Benutzer einen Editor wie CKEditor verwenden dürfen, der beliebigen HTML erlaubt (und ob meine spezielle Wahl des Editors beliebiges HTML erlaubt oder nicht, Blackhats werden können) beliebig HTML senden). Also kein JavaScript, ob SCRIPT-Tags, ONCLICK und Familie oder was auch immer. Die Zielplattform ist Python und Django.Wie in Django/Python kann ich Sicherheit von WYSIWYG-Eingabe-HTML gewährleisten?

Was sind meine besten Optionen hier? Ich bin offen für eine Implementierung, die Tags und Attribute auf die weiße Liste setzen würde. das heißt, ich sehe es nicht als notwendig, einem Benutzer zu erlauben, alles einzureichen, was Sie in HTML erstellen können, während nur JavaScript entfernt wird. Ich bin froh, einen Rich-Text mit der Verfügbarkeit von unterstützten Tags zu haben, der ziemlich aussagekräftigen Rich Text erlaubt. Ich wäre auch offen für einen Editor, der Markdown erstellt und alle HTML-Tags entfernt, bevor die Daten gespeichert werden. (HTML-Manipulation scheint einfacher, aber ich würde auch Markdown-implementierte Lösungen in Betracht ziehen.)

Ich halte es auch nicht für notwendig, einen bereinigten Text zu erstellen, wenn stattdessen eine Ausnahme ausgelöst wird, die besagt, dass eine Übermittlung fehlgeschlagen ist. (Ergo, die Zeichenfolge zu senken und Suche nach '< Skript', 'onclick', etc. könnte ausreichen.)

Wahrscheinlich meine erste Wahl in einer Lösung, wenn ich die Wahl hätte, wäre eine Whitelist des Tags und Attributnamen.

Was sind die besten Lösungen, wenn überhaupt, die da draußen sind?

+1

Haben Sie etwas wie [Bleiche] (https://pypi.python.org/pypi/bleach) ausgecheckt? Es macht genau das, was du beschreibst. Es erlaubt einige Tags durch und ersetzt bösartige mit '< >' – user2896976

+0

Ich denke, Sie können einen benutzerdefinierten Filter [so] (http://stackoverflow.com/a/41434870/6396981) erstellen ... –

Antwort

1

Wenn Sie einen WYSIWYG-Editor verwenden, der HTML erzeugt, ist wahrscheinlich die Verwendung von bleach auf dem Server zur Bereinigung Ihres HTML (über Whitelisting) ausreichend.

Wenn Sie einen Markdown-Editor (oder einen anderen Nicht-HTML-Markup) verwenden, speichern Sie wahrscheinlich auch die Markdown-Quelle und generieren und bereinigen den HTML-Code (nach der Generierung!) Auf der Serverseite. Dies ermöglicht es Ihnen, Markdown wie es ist (mit Inline-HTML usw.) zu halten, da HTML nach dem Rendern bereinigt wird. Wenn Ihr clientseitiger Editor jedoch eine Vorschau unterstützt, müssen Sie beim Rendern des Markdowns vom Server sehr vorsichtig sein. Die meisten Markdown-Editoren enthalten zu diesem Zweck clientseitige Desinfektionsmittel.

Verwandte Themen