Erro CSP ao adicionar um script via um componente de tema

Problema com Strict Dynamic e CSP no Widget da Atlassian

Estou encontrando um problema com a Política de Segurança de Conteúdo (CSP) após a atualização para a v3.3.0.beta1. Especificamente, estou tentando incorporar um widget da Atlassian no cabeçalho do meu contêiner, que foi criado antes desta atualização.

Aqui está o que adicionei ao cabeçalho:

<script data-jsd-embedded nonce="{{content_security_policy_nonce}}" data-key="bla" data-base-url="https://jsd-widget.atlassian.com" src="https://jsd-widget.atlassian.com/assets/embed.js"></script>

Certifiquei-me de incluir o nonce, mas estou encontrando os seguintes erros:

embed.js:1 Refused to set the document's base URI to 'https://jsd-widget.atlassian.com/' because it violates the following Content Security Policy directive: "base-uri 'self'".

embed.js:1 Refused to load the script 'https://jsd-widget.atlassian.com/assets/iframe.js' because it violates the following Content Security Policy directive: "script-src 'nonce-YAnMdLzmoWqLis3WXiQKjxdHk' 'strict-dynamic'". Note that 'script-src-elem' was not explicitly set, so 'script-src' is used as a fallback.

Além disso, deparei-me com uma sugestão em uma postagem anterior para carregar o script dinamicamente desta forma:
javascript

var s = document.createElement('script');
s.src = "https://jsd-widget.atlassian.com/assets/embed.js";
document.body.appendChild(s);

No entanto, isso não parece resolver o problema. Claramente, estou perdendo algo sobre como strict-dynamic deve funcionar neste contexto.

Alguém pode me ajudar a entender por que esses erros estão ocorrendo e como posso resolvê-los? Qualquer orientação seria apreciada!

3 curtidas

Curiosamente, eu estava justamente analisando um problema quase idêntico.

Consigo reproduzir um problema semelhante na versão mais recente que foi recentemente reconstruída.

Estou recebendo:

[Report Only] Recusou-se a carregar o script 'https://www.mytestsite.com/mini-profiler-resources/includes.js?v=116e2a6fd81c286e004e2a0afb03baa1' porque viola a seguinte diretiva de Política de Segurança de Conteúdo: \"script-src 'nonce-ZSPIEwDBo6e07GuQMDkOFZerD' 'strict-dynamic'\". Observe que 'script-src-elem' não foi definido explicitamente, portanto, 'script-src' está sendo usado como fallback.
3 curtidas

Algum de vocês pode compartilhar um link para um site que mostre esse problema? Ficarei feliz em dar uma olhada rápida :eyes:

Se você adicionou isso por meio de componentes de tema, deverá remover a parte nonce=. O Discourse a adicionará automaticamente (e acho que adicioná-la você mesmo pode quebrar o sistema automático)

3 curtidas

Fechando o ciclo sobre isso - @merefield e eu discutimos via PM e rastreamos até um problema específico do modo “report-only”. Correção aqui: FIX: Mini-profiler CSP nonce when in report-only mode by davidtaylorhq · Pull Request #28664 · discourse/discourse · GitHub

Portanto, parece que este é um problema diferente do que @devops1 está vendo.

4 curtidas

Olá David, muito obrigado.
Pela resposta rápida.

O código que estou adicionando é
<script data-jsd-embedded data-key="bla" data-base-url="https://jsd-widget.atlassian.com" src="https://jsd-widget.atlassian.com/assets/embed.js"></script>

Removi o nonce conforme solicitado.

Este é o site https://onlinecommunity.stroke.org.uk/
Ativei o modo de relatório apenas da política de segurança de conteúdo.

2 curtidas

O componente de tema está habilitado? Não vejo nenhum script da Atlassian quando verifico nas ferramentas de desenvolvedor

1 curtida

Acho que agora deve funcionar, encontrei o script no código-fonte da página.

2 curtidas

Parece que o script embed.js está sendo executado com sucesso, então o lado do Discourse está funcionando.

No entanto, ele está tentando criar um iframe de mesma origem, que inclui tags de script ‘parser-inserted’. Esse tipo de estratégia não é compatível com uma CSP ‘strict-dynamic’.

Portanto, acho que isso é algo que a Atlassian precisaria corrigir. Deparei-me com este problema no rastreador deles, que parece relevante (embora não tenha muitos detalhes ou uma resolução :cry:)

2 curtidas

Obrigado por investigar o problema para mim, David.

2 curtidas

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