Handlebars.js: El manifiesto de extensión de Chrome v2 restringe el uso de eval

Creado en 25 feb. 2013  ·  5Comentarios  ·  Fuente: handlebars-lang/handlebars.js

Los manillares no funcionarán en extensiones de Chrome con manifest_version: 2 debido a una nueva política de seguridad que restringe el uso de eval y sintaxis similar a eval.

EvalError no detectado: se negó a evaluar una cadena como JavaScript porque 'unsafe-eval' no es una fuente de script permitida en la siguiente directiva de política de seguridad de contenido: "script-src 'self' chrome-extension-resource:".
handlebars.js: 1402
JavaScriptCompiler.createFunctionContext handlebars.js: 1402
JavaScriptCompiler.compile handlebars.js: 1320
compilar handlebars.js: 2105
(función anónima) handlebars.js: 2112
(función anónima) panel.js: 14 <--- mi script llamado Handlebars.compile ()

Comentario más útil

Eso básicamente anula todo el punto de usar un CSP para prevenir la inyección.

Todos 5 comentarios

Esto se hereda del diseño del marco. Si está ejecutando en un entorno que no puede usar javascript generado dinámicamente, deberá precompilar sus plantillas e incluir la salida generada con su paquete.

Esto me preocupa. Aquí hay una cita de la página de Google:

"Sin embargo, reconocemos que una variedad de bibliotecas usan eval () y construcciones similares a eval, como new Function () para optimizar el rendimiento y facilitar la expresión. Las bibliotecas de plantillas son especialmente propensas a este estilo de implementación. _Mientras que algunas (como Angular .js) admiten CSP desde el primer momento, _ muchos marcos populares aún no se han actualizado a un mecanismo que sea compatible con el mundo sin evaluación de las extensiones. Por lo tanto, eliminar el soporte para esa funcionalidad ha demostrado ser más problemático de lo esperado para los desarrolladores ".

Entonces, ¿algunos sistemas de plantillas pueden lograr ser compatibles con CSP, pero no con Handlebars? Entonces, ahora que he usado Handlebars en mi proyecto, tengo 2 opciones para que mi aplicación sea compatible con CSP:

1) Arrancar los manillares
2) Precompile todas mis plantillas.

Dada la naturaleza dinámica de mis plantillas, la compilación previa no es una opción. Entonces, ahora tengo que arrancar el manillar porque este defecto está cerrado.

¿No es posible seguir la guía de CSP aquí?

"Puede permitirlo agregando 'unsafe-eval' a su lista de fuentes"

Eso básicamente anula todo el punto de usar un CSP para prevenir la inyección.

FWIW, Cloudant (basado en Apache CouchDB) cambió recientemente su procesamiento de scripts en la base de datos para evitar también eval() y new Function() https://console.bluemix.net/docs/services/Cloudant/release_info /deprecations.html#disabled -javascript-constructors

La precompilación de plantillas en JS funciona para algunos escenarios, pero no para todos. Sería genial si hubiera otras opciones, para que Handlebars.js pudiera usarse en más lugares.

Pero ... eso podría ser solo una ilusión. : smiley: 💭

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

amirzandi picture amirzandi  ·  7Comentarios

stevenvachon picture stevenvachon  ·  7Comentarios

mattkime picture mattkime  ·  4Comentarios

ustun picture ustun  ·  6Comentarios

rhariraman picture rhariraman  ·  5Comentarios