Erro de CSP ao usar biblioteca de terceiros em plugin

Após muitas tentativas e abordagens diferentes, consegui carregar com sucesso uma biblioteca de terceiros para usar em meu plugin.

A biblioteca está localizada em public/javascripts/some-library.js.

Em meu controller, consigo carregar o script com sucesso via:

loadScript("/plugins/my-plugin/javascripts/some-library.js")

Em algumas ocasiões nesse arquivo, a biblioteca cria Blobs e os atribui a variáveis que estão sendo usadas. Por exemplo:

var A=URL.createObjectURL(new Blob(['\n\tsome code snippet...],{type:"application/javascript"}))

E sempre que tento usar a biblioteca em meu código de plugin, recebo:

Refused to load the script 'blob:http://localhost:4200/f33a6788-a853-4286-883a-48cb8e2c9cc1' because it violates the following Content Security Policy directive: "script-src http://localhost:4200/assets/ etc etc...

Qual seria a melhor maneira de contornar isso?

Obrigado por qualquer ajuda e dicas!

1 curtida

E se você apenas adicionar http://localhost:4200 à CSP?

Eu já tentei isso, e não mudou nada :confused:

E quanto a blob:http://localhost:4200?

Tentei isso também, mas essa é uma declaração inválida para uma CSP :confused:

Para quem encontrar isso, a linha correta a ser adicionada ao script-src do CSP é blob:

Espere! Você não precisa implementar CSP em desenvolvimento, você não corre risco de ataques?

Isso também pode bloquear algumas ferramentas de desenvolvedor.

Basta desativar esta configuração:

Simples.

Eu adiaria essa dor de cabeça até que você tenha um plugin funcionando, testando em um servidor de homologação de produção.

Eu estava, de fato, na fase de prepará-lo para a produção, então esta foi a última dor de cabeça a ser resolvida. E, além disso, eu não gosto de adiar essas coisas, especialmente quando preciso descobrir se elas podem ser um potencial impeditivo e preciso encontrar um caminho totalmente diferente :man_surfing:

Sim, mas você deveria estar trabalhando na configuração do CSP no servidor de staging de produção que tem um endereço de internet real.

Localhost não é um endereço de internet! :slight_smile::wink: Nem mesmo é https …

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.