Está definindo uma Política de Segurança de Conteúdo incompatível com a página de administração do Joomla?

3

Gostaria de definir um cabeçalho de diretiva de segurança de conteúdo para um site do Joomla rodando no Apache 2.4.

Usando esta configuração do h5bp e definir Header set Content-Security-Policy "script-src 'self'; object-src 'self'" me dá uma página em branco para a página de login do Joomla em www.example.com/administrator/. Como posso usar essa política e ainda fazer login?

Verificando o console, a mensagem de erro é:

Content Security Policy: The page's settings blocked the loading of a resource at self ("script-src http://www.example.com").

A página do administrador é totalmente veiculada em example.com, não há conteúdo de terceiros. O site funciona perfeitamente, exceto pela página em branco na página de login com o conjunto de políticas. Verificando a origem da página / administrator, parece completamente normal, exceto que o JS não é executado. Uma cópia da fonte completa da página está aqui .

Porque eu coloquei na lista de permissões example.com com "script-src 'self'; objeto-src 'self'" Espero que a página seja processada, mas obviamente estou perdendo alguma coisa.

Eu agora re-testei isso com um novo VPS e uma instalação limpa do Joomla sem personalizações. Definir a política de segurança de conteúdo e reiniciar o Apache imediatamente reproduz o problema - página de administração totalmente em branco com erro de console acompanhante no navegador reclamando da política que bloqueia o carregamento de recursos. Alterar "script-src 'self' para "script-src 'example.com' ou "script-src 'IP:AD:DR:ESS' não ajuda, todos os scripts estão bloqueados, ponto final.

Alguma ideia de como fazer isso funcionar ou solucionar o problema?

    
por Tom Brossman 15.03.2015 / 12:14

1 resposta

3

Depois de olhar para o código-fonte, parece que a mensagem de erro está incorreta e enganosa. O que parece estar causando o problema é que existem vários elementos JavaScript inline. Em outras palavras, a política que você está definindo permite conteúdo como este:

<script src="/media/myjsfile.js"></script>

Mas não assim:

<script>function myJsFunction()</script>

Para permitir JavaScript inline ( não recomendado, pois isso anula o propósito de usar o CSP ), é necessário modificar sua política para algo como:

script-src 'self' 'unsafe-inline'

Como alternativa, você pode refatorar o código para não usar o JS sequencial ou aproveitar o nonce . Tenha em mente que o suporte para o atributo nonce não está atualmente presente em todos os navegadores (é parte da mais recente especificação da Política de segurança de conteúdo). Até onde sei, atualmente ele é suportado apenas no Chrome.

    
por 28.05.2015 / 20:25