Este guia explica como usar a Política de Segurança de Conteúdo (CSP) para mitigar ataques de Cross-Site Scripting (XSS) no Discourse. Ele aborda os fundamentos da CSP, configuração e melhores práticas.
Nível de usuário necessário: Administrador
Resumo
A Política de Segurança de Conteúdo (CSP) é um recurso de segurança crucial no Discourse que ajuda a proteger contra Cross-Site Scripting (XSS) e outros ataques de injeção. Este guia cobre os fundamentos da CSP, como ela é implementada no Discourse e como configurá-la para o seu site.
O que é a Política de Segurança de Conteúdo?
A Política de Segurança de Conteúdo é uma camada adicional de segurança que ajuda a detectar e mitigar certos tipos de ataques, incluindo Cross-Site Scripting (XSS) e ataques de injeção de dados. A CSP funciona especificando quais fontes de conteúdo são consideradas confiáveis e instruindo o navegador a executar ou renderizar recursos apenas dessas fontes confiáveis.
O XSS continua sendo uma das vulnerabilidades web mais comuns. Ao implementar a CSP, o Discourse permite que apenas scripts de fontes confiáveis sejam carregados e executados, reduzindo significativamente o risco de ataques XSS.
Implementação da CSP no Discourse
A partir da versão 3.3.0.beta1 do Discourse, o sistema implementa uma CSP do tipo ‘strict-dynamic’. Essa abordagem utiliza um único valor nonce- e a palavra-chave strict-dynamic na diretiva script-src. Todas as tags \u003cscript\u003e iniciais no núcleo e nos temas recebem automaticamente o atributo nonce= apropriado.
A política padrão inclui as seguintes diretivas:
script-src: Especifica fontes válidas para JavaScriptsworker-src: Especifica fontes válidas para scripts ServiceWorkerobject-src: Bloqueia a execução de plugins (Flash, Java, etc.)base-uri: Restringe as URLs para elementos\u003cbase\u003emanifest-src: Restringe as URLs para manifestos de aplicativos webframe-ancestors: Controla quais sites podem incorporar sua instância do Discourse em um iframeupgrade-insecure-requests: Atualiza automaticamente solicitações HTTP para HTTPS (incluído quandoforce_httpsestá ativado)
Configurando a CSP no Discourse
Configurações disponíveis
content_security_policy: Ativa ou desativa a CSP (padrão: ligado)content_security_policy_report_only: Ativa o modo CSP Report-Only (padrão: desligado)content_security_policy_script_src: Permite estender a diretivascript-srcpadrãocontent_security_policy_frame_ancestors: Ativa a diretivaframe_ancestors(padrão: ligado)
Como ativar a CSP
- Acesse seu painel de Administração
- Vá para as configurações de Segurança
- Encontre a configuração
content_security_policye certifique-se de que está ativada
Recomenda-se começar com o modo CSP Report-Only para identificar possíveis problemas antes de ativar completamente a CSP:
- Ative a configuração
content_security_policy_report_only - Monitore o console do navegador para violações da CSP
- Resolva quaisquer violações legítimas estendendo a CSP conforme necessário
- Assim que tiver certeza de que não há falsos positivos, desative o modo Report-Only e ative completamente a CSP
Estendendo a CSP padrão
Se precisar permitir fontes de script adicionais, você pode estender a diretiva script-src usando a configuração content_security_policy_script_src. Você pode adicionar:
- Fontes baseadas em hash
'wasm-unsafe-eval''unsafe-eval'(use com cautela)
Por exemplo:
'sha256-QFlnYO2Ll+rgFRKkUmtyRublBc7KFNsbzF7BzoCqjgA=' 'unsafe-eval'
Tenha cuidado ao adicionar 'unsafe-eval' ou outras diretivas permissivas, pois elas podem reduzir a eficácia da CSP.
CSP e integrações de terceiros
Ao usar serviços de terceiros como Google Tag Manager, Google Analytics ou serviços de publicidade, talvez seja necessário ajustar suas configurações de CSP. Na maioria dos casos com o Discourse versão 3.3.0.beta1 ou posterior, scripts externos devem funcionar sem configuração adicional devido à implementação da CSP ‘strict-dynamic’.
Se encontrar problemas, talvez seja necessário:
- Identificar as fontes de script necessárias monitorando o console do navegador
- Adicionar as fontes necessárias à configuração
content_security_policy_script_src - Para integrações complexas como serviços de publicidade que carregam recursos externos, talvez seja necessário ativar a renderização entre domínios (Exemplo de PR do discourse-adplugin que faz isso).
Melhores práticas
- Comece com o modo CSP Report-Only para identificar possíveis problemas
- Aperte gradualmente sua CSP à medida que resolve violações legítimas
- Revise regularmente suas configurações de CSP e ajuste conforme necessário
- Tenha cuidado ao adicionar diretivas permissivas como
'unsafe-eval'ou'wasm-unsafe-eval' - Mantenha sua instância do Discourse atualizada para se beneficiar das últimas melhorias da CSP
Perguntas frequentes (FAQs)
P: Estou vendo muitos relatórios de violação da CSP. Devo me preocupar?
R: Muitas violações da CSP são falsos positivos, frequentemente causados por extensões do navegador ou outros scripts não relacionados. Foque em resolver violações relacionadas à funcionalidade do seu site.
P: Posso usar a CSP com o Google AdSense ou outras redes de anúncios?
R: Sim, mas talvez seja necessário usar configurações de CSP mais permissivas. Comece com o modo Report-Only e ajuste suas configurações com base nas violações relatadas.
P: Como soluciono problemas relacionados à CSP?
R: Use as ferramentas de desenvolvedor do seu navegador para monitorar o console em busca de mensagens de violação da CSP. Elas ajudarão a identificar quais recursos estão sendo bloqueados e o motivo.







