Estou executando uma instância auto-hospedada do Discourse em forum.embeetle.com. Ele tem funcionado bem por vários anos.
Esta manhã, notei que toda a interação do teclado e mouse com o fórum no navegador parou de funcionar. Posso carregar qualquer página do fórum, mas não consigo rolar, fazer login, pesquisar, …
Tentei tanto o Firefox quanto o Chromium: o mesmo problema.
As ferramentas de desenvolvedor do Firefox mostram este erro:
Content-Security-Policy: As configurações da página bloquearam o carregamento de um recurso em inline (“script-src”). forum.embeetle.com:362:10
Não fiz nenhuma atualização recentemente nem instalei novos plugins.
Alguma sugestão sobre como posso depurar e corrigir isso?
Pelo que sei, tenho uma instalação padrão baseada em docker, exceto que a estou executando atrás de um proxy reverso Nginx. Configuração do Nginx abaixo (não tenho certeza se é relevante):
Eu não me lembro de ter definido um tema como padrão, mas talvez eu tenha feito e esquecido.
Gostaria de desativar temporariamente os temas por padrão, para que nosso fórum fique utilizável enquanto descobrimos o que há de errado com os temas. Como posso fazer isso, se só consigo acessar as páginas de administração com os temas desativados? No modo de segurança, todos os temas já estão desativados, e ativá-los e desativá-los novamente parece não ter efeito.
Existem três temas disponíveis (veja abaixo). Nenhum deles está ativado por padrão.
Estranho, para mim no Safari, ele está relatando que se recusa a executar a linha 315. Que é o script inline para o pré-carregador Discourse-spash. Portanto, não relacionado ao tema.
Para uma correção imediata, você pode desabilitar o CSP usando uma configuração do site:
Apenas especulando: Se o problema persistir, pode ser que seu ambiente de servidor esteja enviando algo inesperado. Ou outro script interferindo (você está executando algum plugin personalizado ou outros scripts?)
Note que isso o deixará em um estado vulnerável e deve ser resolvido o mais rápido possível. Mas pelo menos seu fórum está funcionando novamente.
Sim, é exatamente isso que está acontecendo comigo.
Implementei uma solução alternativa diferente por enquanto, adicionando um rewrite na configuração do nginx (no nível do servidor) da seguinte forma:
rewrite ^(.*)$ $1?safe_mode=no_themes break;
Portanto, os visitantes usarão o modo seguro por padrão agora.
Para permitir uma exploração mais aprofundada deste problema, também dupliquei o servidor do fórum sem o rewrite em https://raw.forum.embeetle.com. Se você visitar esse URL, ainda verá o problema original.
Não estou usando nenhum script personalizado. Estou usando alguns plugins, vou experimentar se desativar algum deles terá algum efeito.
Encontrado: foi realmente um problema com minha configuração do nginx que agora emitiu acidentalmente um cabeçalho Content-Security-Policy muito restritivo para o Discourse.
Remover o Content-Security-Policy corrigiu meu problema.