Estamos experimentando uma nova política de segurança de conteúdo (CSP) ‘strict-dynamic’, que deve facilitar muito a integração de temas, plugins e scripts externos com o Discourse de forma segura.
Você pode experimentar o novo modo ativando a configuração do site ‘content security policy strict dynamic’. Por favor, nos informe se tiver algum feedback!
Esperamos tornar este o padrão em um futuro próximo e faremos um tópico de Announcements à medida que nos aproximamos desse objetivo.
Para mais informações, veja abaixo:
Histórico
Em 2018, introduzimos uma Política de Segurança de Conteúdo padrão para o Discourse. Na época, nossa política de suporte ao navegador significava que estávamos restritos ao uso de valores ‘host-source’ (ou seja, listando prefixos de URL para cada script que deveria ser permitido).
Aqui em 2024, há mais opções disponíveis: a palavra-chave 'strict-dynamic'. Isso remove a necessidade de listar todas as URLs de script com antecedência. Em vez disso, quaisquer scripts inicialmente confiáveis (através de um valor ‘hash’ ou ‘nonce’) podem carregar mais scripts com restrições mínimas.
Como posso experimentar este novo modo?
Ative a configuração ‘content security policy strict dynamic’ em seu painel de administração.
Se você não vir a configuração, certifique-se de estar executando a versão mais recente do Discourse. O novo recurso foi mesclado em 16 de fevereiro (durante o ciclo 3.3.0.beta1-dev).
Se você estiver em nossa hospedagem e quiser agilizar a atualização, basta nos informar!
O que acontece quando eu ativo a nova configuração?
A diretiva script-src do Content-Security-Policy será atualizada para incluir um único valor nonce- e a palavra-chave 'strict-dynamic'.
Todas as tags \u003cscript\u003e iniciais no núcleo e nos temas receberão automaticamente o atributo nonce= apropriado. Nenhum trabalho extra de administradores ou desenvolvedores de temas é necessário.
Plugins que injetam suas próprias tags \u003cscript\u003e personalizadas precisarão ser atualizados para suportar este novo modo (por exemplo). Estamos trabalhando para coletar dados sobre a extensão disso e forneceremos orientação aos desenvolvedores, se necessário.
Quaisquer valores de host-source que temas ou plugins estejam contribuindo serão ignorados automaticamente (os navegadores não suportam host-source ao lado de strict-dynamic).
E quanto a scripts externos como GTM, analytics, publicidade, etc.?
Eles devem funcionar ‘automaticamente’, sem configuração adicional necessária. Informe-nos se você encontrar algum problema!
É reversível?
Sim! Enquanto estivermos executando o experimento, você pode ativar e desativar a configuração e a alteração terá efeito imediato.
Exemplos de políticas
Exemplo de política do Discourse antes desta alteração:
upgrade-insecure-requests;
base-uri 'self';
object-src 'none';
script-src https://meta.discourse.org/logs/ https://meta.discourse.org/sidekiq/ https://meta.discourse.org/mini-profiler-resources/ https://d11a6trkgmumsb.cloudfront.net/assets/ https://meta.discourse.org/extra-locales/ https://d3bpeqsaub0i6y.cloudfront.net/highlight-js/ https://d3bpeqsaub0i6y.cloudfront.net/javascripts/ https://d3bpeqsaub0i6y.cloudfront.net/plugins/ https://d3bpeqsaub0i6y.cloudfront.net/theme-javascripts/ https://d3bpeqsaub0i6y.cloudfront.net/svg-sprite/ 'sha256-8uAKDaK4QxxCeYZl0Wxad2Nnj2tgKyA14hYBh66pnn0=' 'sha256-QFlnYO2Ll+rgFRKkUmtyRublBc7KFNsbzF7BzoCqjgA=';
worker-src 'self' https://d11a6trkgmumsb.cloudfront.net/assets/ https://d3bpeqsaub0i6y.cloudfront.net/javascripts/ https://d3bpeqsaub0i6y.cloudfront.net/plugins/;
frame-ancestors 'self';
manifest-src 'self';
Exemplo de política do Discourse após esta alteração:
upgrade-insecure-requests;
base-uri 'self';
object-src 'none';
script-src 'nonce-78uQrKOCg78iGuMAwCq2lI9E7' 'strict-dynamic';
frame-ancestors 'self';
manifest-src 'self';
Recursos
Documentação MDN sobre strict-dynamic