Wann sollte ich in Djangos Vorlagensystem escape und safe verwenden?

7

Wenn ich eine Box habe, wo Leute Kommentare abgeben, und dann zeige ich diesen Kommentar so ... sollte ich fliehen?

%Vor%     
TIMEX 30.10.2010, 01:40
quelle

4 Antworten

14

Eigentlich kommt es darauf an. Djangos Templating-Engine entweicht automatisch, so dass Sie nicht wirklich flüchten müssen.

Wenn Sie den Vorlagenfilter "sicher" wie {{c.title|safe}} hinzufügen, müssen Sie sich um Dinge wie die HTML-Injektion kümmern, denn "sicher" markiert die Zeichenfolge als solche und bedeutet, dass sie nicht maskiert wird.

>

Es gibt auch ein Schablonen-Tag {% autodescape on%} ... {% endautoescape%}, wobei "on" bei Bedarf auf "off" gesetzt werden kann. Standardmäßig ist es aktiviert und das Tag wird nicht benötigt.

Andere Template-Engines können nicht standardmäßig austreten, Jinja2 ist einer von ihnen.

    
Evgeny 30.10.2010, 03:26
quelle
3

Das automatische HTML-Escaping ist standardmäßig aktiviert, sodass Sie in den meisten Fällen nicht manuell ausweichen müssen, aber nicht alle !

Den Inhalt einer Variablen in einem HTML-Element zu speichern ist in Ordnung:

%Vor%

Django entkommt automatisch den Zeichen < , > , & , " und ' , was hier benötigt wird.

Es ist auch in Ordnung, eine Variable innerhalb eines Attributs abzulegen, da " und ' beide maskiert sind, aber denken Sie daran, Anführungszeichen zu verwenden, da Leerzeichen nicht maskiert sind:

%Vor%

Wenn Sie eine Zeichenfolge innerhalb von Javascript verwenden möchten, müssen Sie den escapejs -Filter verwenden und die Anführungszeichen nicht vergessen. Dies schützt sowohl davor, aus den Anführungszeichen für die Javascript-Variable auszutreten, als auch mit <script> :

aus dem </script> -Tag zu entkommen %Vor%     
Flimm 12.08.2016 18:46
quelle
2

Ja! Was ist, wenn sie <script>alert('boom');</script> als Titel eingegeben haben?

Django Autoescape macht das viel einfacher.

    
brool 30.10.2010 01:49
quelle
1

Automatisches Escaping ist in Django-Vorlagen standardmäßig aktiviert, sodass Sie die Escape-Funktion nicht verwenden müssen. Safe wird verwendet, wenn Sie es deaktivieren möchten und das Vorlagen-Rendering-System wissen lassen soll, dass Ihr Datum in einem nicht maskierten Format sicher ist. Einzelheiten finden Sie in den django-Dokumenten:

ars 30.10.2010 03:31
quelle

Tags und Links