Handlebars.js: Chrome-Erweiterungsmanifest v2 schränkt die Verwendung von eval ein

Erstellt am 25. Feb. 2013  ·  5Kommentare  ·  Quelle: handlebars-lang/handlebars.js

Lenker funktionieren nicht in Chrome-Erweiterungen mit manifest_version: 2 aufgrund einer neuen Sicherheitsrichtlinie, die die Verwendung von eval und eval-ähnlicher Syntax einschränkt.

Nicht abgefangener EvalError: Die Auswertung einer Zeichenfolge als JavaScript wurde abgelehnt, da 'unsafe-eval' in der folgenden Richtlinie zur Inhaltssicherheitsrichtlinie keine zulässige Skriptquelle ist: "script-src 'self' chrome-extension-resource:".
lenker.js:1402
JavaScriptCompiler.createFunctionContext handlebars.js:1402
JavaScriptCompiler.compile handlebars.js:1320
kompiliere handlebars.js: 2105
(anonyme Funktion) handlebars.js:2112
(anonyme Funktion) panel.js:14 <--- mein Skript namens Handlebars.compile()

Hilfreichster Kommentar

Das macht im Grunde den Sinn der Verwendung eines CSP zur Verhinderung einer Injektion zunichte.

Alle 5 Kommentare

Dies ist an das Design des Frameworks geerbt. Wenn Sie in einer Umgebung arbeiten, in der Sie kein dynamisch generiertes Javascript verwenden können, müssen Sie Ihre Vorlagen vorkompilieren und die generierte Ausgabe in Ihr Paket aufnehmen.

Das beunruhigt mich. Hier ein Zitat von der Google-Seite:

„Wir erkennen jedoch, dass eine Vielzahl von Bibliotheken eval() und eval-ähnliche Konstrukte wie new Function() zur Leistungsoptimierung und einfacheren Ausdrucksweise verwenden. Vorlagenbibliotheken sind besonders anfällig für diesen Implementierungsstil. _Während einige (wie Angular .js) unterstützen CSP von Haus aus,_ viele gängige Frameworks wurden noch nicht auf einen Mechanismus aktualisiert, der mit der eval-less-Welt von Erweiterungen kompatibel ist. Die Entfernung der Unterstützung für diese Funktionalität hat sich daher für Entwickler als problematischer erwiesen als erwartet."

Einige Vorlagensysteme können also CSP-kompatibel sein, Lenkstangen jedoch nicht? Nachdem ich nun Lenker in meinem Projekt verwendet habe, habe ich zwei Möglichkeiten, um meine App CSP-kompatibel zu machen:

1) Lenker ausreißen
2) Kompilieren Sie alle meine Vorlagen vor.

Angesichts der dynamischen Natur meiner Vorlagen ist die Vorkompilierung keine Option. So, jetzt muss ich den Lenker ausreißen, da dieser Defekt geschlossen ist.

Ist es nicht möglich, dem CSP-Leitfaden hier zu folgen?

"Sie können es zulassen, indem Sie 'unsafe-eval' zu Ihrer Quellenliste hinzufügen"

Das macht im Grunde den Sinn der Verwendung eines CSP zur Verhinderung einer Injektion zunichte.

FWIW, Cloudant (basierend auf Apache CouchDB) hat kürzlich seine datenbankinterne Skriptverarbeitung geändert, um auch eval() und new Function() https://console.bluemix.net/docs/services/Cloudant/release_info /deprecations.html#disabled -javascript-constructors

Das Vorkompilieren von Vorlagen in JS funktioniert für einige Szenarien, aber nicht für alle. Es wäre toll, wenn es andere Optionen gäbe, damit Handlebars.js an mehreren Stellen verwendet werden könnte.

Aber... das ist vielleicht nur Wunschdenken. :smiley:

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen