Sicheres Verwenden von JSON mit HTML innerhalb des JSON in Django Templates

8

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.

    
speedplane 12.01.2013, 05:21
quelle

1 Antwort

14

Fügen Sie das JSON-Objekt sicher als Zeichenfolge ein, und rufen Sie anschließend JSON.parse darauf

auf

Verwenden 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%     
Flash 12.01.2013, 05:25
quelle

Tags und Links