Mustache.js: Alle Werte entfernen

Erstellt am 14. Aug. 2012  ·  14Kommentare  ·  Quelle: janl/mustache.js

Wäre es möglich, eine Option hinzuzufügen, um überhaupt kein HTML-Escapen durchzuführen?

Hilfreichster Kommentar

Ich habe es nicht getestet, aber laut der Manpage:
All variables are HTML escaped by default. If you want to return unescaped HTML, use the triple mustache: {{{name}}}.
Wenn das nicht funktioniert, können Sie eine Funktion verwenden, die einfach ihre Eingabe ohne Escape zurückgibt.

Alle 14 Kommentare

Ich habe es nicht getestet, aber laut der Manpage:
All variables are HTML escaped by default. If you want to return unescaped HTML, use the triple mustache: {{{name}}}.
Wenn das nicht funktioniert, können Sie eine Funktion verwenden, die einfach ihre Eingabe ohne Escape zurückgibt.

Ja, das ist das aktuelle Verhalten, aber mein Anwendungsfall dafür hat sehr vertrauenswürdige Eingaben und viele Sonderzeichen.

Ich meinte diesen Teil:
If you want to return unescaped HTML, use the triple mustache: {{{name}}}.
Wenn Sie also nicht möchten, dass Ihre Variablen maskiert werden, sollten Sie den dreifachen Schnurrbart anstelle des doppelten verwenden.
Bearbeiten: Ich habe es getestet und dies ist in dieser Implementierung korrekt implementiert.

Ja, ich habe mich gefragt, ob es möglicherweise eine nützliche Verknüpfung gibt, um das Standardverhalten zu ändern.

Einige Implementierungen haben in der Vergangenheit ein invertiertes Escape-Pragma unterstützt (mustache.php v1.x, ruby ​​v0.8ish). Dies vertauschte im Wesentlichen die Bedeutung von {{ foo }} und {{{ foo }}} . Es ist praktisch für Nicht-HTML-Anwendungen, wie ini-Dateien, da es in diesem Fall keinen Sinn macht, HTML-Entitäten zu maskieren, und es erspart Ihnen eine Menge zusätzlicher Schnurrbärte.

Moustache.php v2.x unterstützt dieses Pragma jedoch nicht. Wir haben uns stattdessen für eine benutzerdefinierte Escape-Option entschieden, die es Benutzern ermöglicht, einen alternativen Escape-Callback zu übergeben. Das Bestehen von function($text) { return $text; } macht die Flucht zu einem No-Op.

Hmm, das würde genau zu meinem Anwendungsfall passen. Ist dies in mustache.js möglich, und wenn ja, wo würden Sie diese Funktion übergeben?

Richtig, es ist in Ordnung, sich an die OWASP-Richtlinien zu halten, aber es ist in einigen Fällen nicht sinnvoll, jederzeit zu fliehen. Gibt es eine ETA, um dieses Problem abzuschließen?

Wäre es nicht einfacher, {{{ und {{ im Parser Ihrer Installation auszutauschen?

Im Moment laufe ich nur:

template.replace(/\{\{([^\}]*)\}\}/g, '{{{$1}}}');

auf alle meine Vorlagen, bevor Sie es ausführen, was funktioniert. Es wäre nur schön, ein mehr eingebautes System zu haben. Ich mag den Vorschlag von

@janl was ist, wenn ich dieselbe Vorlage in zwei Szenarien rendern möchte: zuerst mit Escape, zweiten ohne Escape?

@bobthecow Wir könnten in verfolgen und einfach die exportierte Version von Moustache.escapeHtml für alle Fluchtvorgänge verwenden. Das würde es Benutzern ermöglichen, Folgendes zu tun:

Mustache.escapeHtml = function (text) { return text; }

Wäre das nützlich? Natürlich müssen Sie darauf achten, den Wert der Funktion zurückzusetzen, wenn Sie möchten, dass Escape bei nachfolgenden Aufrufen ordnungsgemäß funktioniert, und Sie könnten sich nicht entscheiden, mit dem Triple-Stache zu entkommen.

:+1: Ich finde es gut. Soweit ich das beurteilen kann, besteht der Hauptanwendungsfall darin, Escape vollständig zu deaktivieren, da es sich um ein Nicht-HTML-Dokument handelt. Ich sehe nicht viel Sinn für den Austausch von Escape/Noescape (weshalb ich es nicht einmal in Moustache.php v2 implementiert habe).

Ja, das würde definitiv meinen Anwendungsfall erfüllen, und ich kann mir vorstellen, dass einige andere Leute es verwenden, z. B.:

Mustache.escapeHtml = function (text) { return text.replace(/\"/g, '\\"'; }

Zeichenfolgen zu entkommen. Oder sie implementieren Whitelisting-Funktionen. Kurz gesagt, es würde alle Anwendungsfälle beheben, die mir einfallen.

Ich habe es nicht getestet, aber laut der Manpage:
All variables are HTML escaped by default. If you want to return unescaped HTML, use the triple mustache: {{{name}}}.
Wenn das nicht funktioniert, können Sie eine Funktion verwenden, die einfach ihre Eingabe ohne Escape zurückgibt.

Danke vielmals!! Das funktioniert.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

rlightner picture rlightner  ·  7Kommentare

zekth picture zekth  ·  18Kommentare

connor11528 picture connor11528  ·  3Kommentare

kuldeepdhaka picture kuldeepdhaka  ·  9Kommentare

SmasherHell picture SmasherHell  ·  18Kommentare