Handlebars.js: O manifesto de extensão v2 do Chrome restringe o uso de eval

Criado em 25 fev. 2013  ·  5Comentários  ·  Fonte: handlebars-lang/handlebars.js

As barras de guiador não funcionam nas extensões do Chrome com manifest_version: 2 devido a uma nova política de segurança que restringe o uso de sintaxe eval e semelhante a eval.

EvalError não capturado: recusado a avaliar uma string como JavaScript porque 'unsafe-eval' não é uma fonte de script permitida na seguinte diretiva de política de segurança de conteúdo: "script-src 'self' chrome-extension-resource:".
handlebars.js: 1402
JavaScriptCompiler.createFunctionContext handlebars.js: 1402
JavaScriptCompiler.compile handlebars.js: 1320
compilar handlebars.js: 2105
(função anônima) handlebars.js: 2112
(função anônima) panel.js: 14 <--- meu script chamado Handlebars.compile ()

Comentários muito úteis

Isso basicamente anula todo o sentido de usar um CSP para prevenir a injeção.

Todos 5 comentários

Isso é inerente ao design da estrutura. Se você estiver executando em um ambiente que não pode usar javascript gerado dinamicamente, precisará pré-compilar seus modelos e incluir a saída gerada em seu pacote.

Isso é preocupante para mim. Aqui está uma citação da página do Google:

"Reconhecemos, no entanto, que uma variedade de bibliotecas usam eval () e construções semelhantes a eval, como new Function () para otimização de desempenho e facilidade de expressão. Bibliotecas de modelos são especialmente propensas a esse estilo de implementação. _Enquanto algumas (como Angular .js) suporte CSP pronto para uso, _ muitos frameworks populares ainda não foram atualizados para um mecanismo que seja compatível com o mundo eval-less das extensões. Remover o suporte para essa funcionalidade, portanto, provou ser mais problemático do que o esperado para os desenvolvedores. "

Portanto, alguns sistemas de template conseguem ser compatíveis com CSP, mas não o Handlebars? Então, agora que usei barras de guia em meu projeto, estou preso com 2 opções para tornar meu aplicativo compatível com CSP:

1) Rip out Handlebars
2) Pré-compilar todos os meus modelos.

Dada a natureza dinâmica dos meus modelos, a pré-compilação não é uma opção. Então, agora eu tenho que arrancar o guidão porque esse defeito está fechado.

Não é possível seguir o guia CSP aqui?

"Você pode permitir isso adicionando 'avaliação insegura' à sua lista de fontes"

Isso basicamente anula todo o sentido de usar um CSP para prevenir a injeção.

FWIW, Cloudant (com base no Apache CouchDB) alterou recentemente seu processamento de script no banco de dados para evitar também eval() e new Function() https://console.bluemix.net/docs/services/Cloudant/release_info /deprecations.html#disabled -javascript-constructors

A pré-compilação de modelos em JS funciona para alguns cenários, mas não para todos eles. Seria ótimo se houvesse outras opções, para que Handlebars.js pudesse ser usado em mais lugares.

Mas ... isso pode ser apenas um pensamento positivo. : smiley: 💭

Esta página foi útil?
0 / 5 - 0 avaliações