Pegjs: Adicionar uma alternativa não Eval para compatibilidade da Política de Segurança de Conteúdo

Criado em 24 out. 2019  ·  12Comentários  ·  Fonte: pegjs/pegjs

Refatoração: remova "eval" da biblioteca

  • Relatório de Bug: Política de Segurança de Conteúdo

Pré-requisitos

  • ** Você pode reproduzir o problema ?: SIM
  • ** Você pesquisou os problemas do repositório ?: SIM
  • ** Você checou os fóruns ?: não
  • ** Você fez uma pesquisa na web (google, yahoo, etc) ?: sim

Descrição

Passos para reproduzir

1.Server set header: Content-Security-Policy: default-src https:

  1. Carregue vendor.js para o cliente
  2. Tentando .parse () com pegjs:
    Erro (ferramentas de desenvolvimento do cromo): recusado a executar script embutido porque ele viola a seguinte diretiva da Política de Segurança de Conteúdo: "script-src 'self' 'unsafe-eval'". A palavra-chave 'inseguro-embutido', um hash ('sha256-NALaJ5yL9XVYFNSX8jAdayjJGG7VDRjzVeu1AYf0Kx0 =') ou um nonce ('nonce -...') é necessário para habilitar a execução embutida.

Programas

  • PEG.js: ^ 0.10.0
  • Node.js: 8.12
  • NPM ou Yarn: 6,41
  • Navegador: Chrome 77, Safari, Firefox
  • SO: Mac OS, Ubuntu
discussion feature not-a-bug task

Comentários muito úteis

Acho que vale a pena adicionar uma alternativa não eval para compatibilidade com a Política de Segurança de Conteúdo; verá isso em algum ponto antes de 0.12 adicionando outro pacote (talvez denominado dist/peg.csp.js ) por meio de um novo arquivo de entrada a ser consumido apenas pelo Webpack

Todos 12 comentários

Isso não parece ser um problema com os pegjs.
Você está carregando seus scripts de uma fonte não segura (http?)

Posso reproduzir isso nos protocolos http e https. É tudo uma questão de política de segurança. Se o código usa a função eval, então ele não será executado, o navegador irá bloquear sua execução
Eu tenho uma solução alternativa para isso, mas não é segura.
Mais detalhes sobre a política de segurança:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy

Seu link é para cabeçalhos http. Você está no controle de quaisquer cabeçalhos que enviar ao seu servidor.

Sim, este cabeçalho está relacionado à segurança, mas qual aplicativo em 2020 não pensará em segurança. É uma prática comum usar essa abordagem em um aplicativo da web moderno.
Pesquisei um pouco no Google e percebi que bibliotecas populares já fizeram essa atualização.
Portanto, não acho que muitos aplicativos irão ignorar a segurança no futuro e selecionar ferramentas apropriadas que serão consistentes com isso.

Pegjs é um gerador de analisador, é um pouco de uma raça separada de bibliotecas JS,
Como o JS dentro da gramática funcionaria sem eval ing isso?

Não acho que seja uma boa solução para um gerador de analisador. Afinal, o desempenho é muito importante aqui.

Estou perdendo o contexto neste problema. Alguém pode apontar o dedo para um código relevante?

Acho que vale a pena adicionar uma alternativa não eval para compatibilidade com a Política de Segurança de Conteúdo; verá isso em algum ponto antes de 0.12 adicionando outro pacote (talvez denominado dist/peg.csp.js ) por meio de um novo arquivo de entrada a ser consumido apenas pelo Webpack

Provavelmente não o torne apenas webpack. Este problema não é específico do webpack, e o webpack está diminuindo rapidamente, em favor do rollup e parcel

Honestamente, não há nenhuma razão particular para deixar eval no lugar se qualquer alternativa for fornecida. Não é como se fosse de alguma forma mais rápido, como estranhamente sugerido acima. Bem pelo contrário

Isso não deve ser sinalizado not-a-bug . Na verdade, é um bug severo.

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