Wie können Sie JSON-Daten in einer django-Webanwendung sicher rendern?
Auf dem Server in Django erzeuge ich JSON-Daten und rendere dann diese JSON-Daten in einer Django-Vorlage. Der JSON enthält gelegentlich Snippets von HTML. Meistens ist das in Ordnung, aber wenn das </script>
-Tag innerhalb der JSON-Daten liegt, wenn es gerendert wird, zerstört es das umgebende Javascript.
Zum Beispiel ...
Auf dem Server habe ich in Python Folgendes:
%Vor%Und dann in der Vorlage :
%Vor%Der resultierende HTML funktioniert gut und sieht so aus:
%Vor%Sie stoßen jedoch auf Probleme, wenn der JSON auf dem Server so aussieht:
%Vor%Jetzt, wenn es gerendert wird, erhalten Sie:
%Vor%Das schließende Skript-Tag innerhalb des JSON-Codes wird als Schließen des gesamten Skriptblocks behandelt. Ihr gesamtes Javascript wird dann brechen.
Eine mögliche Lösung ist, nach </script>
zu suchen, wenn die Vorlagedaten an die Vorlage übergeben werden, aber ich habe das Gefühl, dass es einen besseren Weg gibt.
Fügen Sie das JSON-Objekt sicher als Zeichenfolge ein, und rufen Sie anschließend JSON.parse darauf
aufVerwenden Sie escapejs anstatt sicher zu sein. Es ist für die Ausgabe in JavaScript ausgelegt.
%Vor% Um ein JavaScript-Objekt zu erhalten, müssen Sie JSON.parse
für diese Zeichenfolge aufrufen. Dies ist immer vorzuziehen, wenn Sie eine JSON-Codierung in Ihr Skript schreiben und diese aus Sicherheitsgründen direkt auswerten.
Ein nützlicher Filter, um Python-Objekte direkt zu dem von mir verwendeten Client zu bekommen, ist dies:
%Vor%Und benutze es wie:
%Vor%Tags und Links python django javascript html