# Security Headers: cabeçalhos de segurança e CSP para PrestaShop 8 e 9

> O DataFirefly Security Headers envia os cabeçalhos de segurança HTTP a partir do PrestaShop 8 e 9: Content-Security-Policy, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy e Cross-Origin-Opener-Policy. O módulo configura-se em Parâmetros…

- Página: <https://www.datafirefly.com/pt/documentation/dfsecurityheaders/>
- Idioma: pt
- Atualizado em: 2026-09-30
- Outros idiomas: [fr](https://www.datafirefly.com/documentation/dfsecurityheaders/index.md), [en](https://www.datafirefly.com/en/documentation/dfsecurityheaders/index.md), [es](https://www.datafirefly.com/es/documentation/dfsecurityheaders/index.md), [de](https://www.datafirefly.com/de/documentation/dfsecurityheaders/index.md), [it](https://www.datafirefly.com/it/documentation/dfsecurityheaders/index.md), [pl](https://www.datafirefly.com/pl/documentation/dfsecurityheaders/index.md), [nl](https://www.datafirefly.com/nl/documentation/dfsecurityheaders/index.md)
- Índice: <https://www.datafirefly.com/pt/documentation/llms.txt>

O DataFirefly Security Headers envia os cabeçalhos de segurança HTTP a partir do PrestaShop 8 e 9: Content-Security-Policy, HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy e Cross-Origin-Opener-Policy. O módulo configura-se em **Parâmetros avançados > Cabeçalhos de segurança**, organizado em seis separadores: Painel, Geral e modo de teste, Content-Security-Policy, HSTS e outros cabeçalhos, Permissions-Policy e Violações CSP.

## Instalação

1. Em **Módulos > Gestor de módulos**, clique em **Carregar um módulo** e envie o ficheiro ZIP.
2. O módulo instala-se em modo de teste, com a CSP em Report-Only e a recolha de violações ativa: nenhum visitante é bloqueado.
3. Abra **Parâmetros avançados > Cabeçalhos de segurança**. A ligação Configurar do gestor de módulos leva ao mesmo sítio.

## Passagem a produção, passo a passo

A lista **Passagem a produção** do painel segue estes passos e mostra o seu estado.

1. **Indique os seus dispositivos de teste.** Separador Geral e modo de teste: clique em **Adicionar o meu endereço IP**, ou copie a ligação de teste e abra-a no telemóvel.
2. **Marque os serviços que usa** no separador Content-Security-Policy, bloco Serviços de terceiros.
3. **Percorra a loja** a partir de um dispositivo de teste: página inicial, categoria, página de produto, carrinho, processo de compra até ao pagamento, conta de cliente. As violações aparecem no separador Violações CSP em poucos minutos.
4. **Trate as violações**: permita as fontes legítimas e ignore as restantes.
5. **Mude a CSP para Aplicar** quando não surgir nenhuma violação nova durante 24 horas.
6. **Clique em Pré-visualizar produção** no painel para ver a nota sem modo de teste e depois **desative o modo de teste**.
7. **Confirme num scanner público** como securityheaders.com ou Mozilla Observatory, depois de limpar a cache do CDN, se usar um.

## O modo de teste

Enquanto o modo de teste estiver ativo, cada pedido recebe um destes tratamentos:

- **Dispositivos de teste** (IP da lista ou navegador aberto com a ligação de teste): todos os cabeçalhos, CSP aplicada seja qual for o modo escolhido, HSTS limitado a 5 minutos e sem preload.
- **Outros visitantes**: apenas a CSP em Report-Only, se a recolha de violações estiver ativa. Nada é bloqueado, mas os navegadores indicam o que seria.

Depois de desativar o modo de teste, todos os visitantes recebem a configuração completa.

A lista de IP aceita endereços IPv4 e IPv6 e intervalos CIDR, um por linha. A **ligação de teste** marca o navegador que a abre como dispositivo de teste durante 24 horas, útil para um telemóvel em 4G cujo IP muda. Abra o mesmo endereço com `?dfsh_test=off` para parar mais cedo. **Criar uma nova ligação** invalida as ligações anteriores.

A opção **Aplicar ao back-office** envia HSTS, X-Frame-Options em SAMEORIGIN, X-Content-Type-Options e Referrer-Policy no back-office. A CSP e a Permissions-Policy nunca são aplicadas aí.

## Content-Security-Policy

### Diretivas

Cada diretiva aceita fontes separadas por espaços ou quebras de linha: palavras-chave (`'self'`, `'none'`, `'unsafe-inline'`, `'unsafe-eval'`), anfitriões (`https://www.example.com`, `*.example.com`), esquemas (`data:`, `https:`), nonces e hashes. As aspas em falta à volta das palavras-chave são adicionadas. Um valor inválido é descartado e assinalado ao guardar. Uma diretiva de carregamento vazia recorre a `default-src`; as restantes diretivas vazias não são enviadas.

### Serviços de terceiros

Cada serviço marcado adiciona os seus domínios às diretivas necessárias, sem alterar as suas entradas: Google Analytics 4 e Tag Manager, Google Ads, Google Fonts, reCAPTCHA, Google Maps, YouTube, Vimeo, Meta Pixel, TikTok, Pinterest, Stripe, PayPal, Mollie, Cookiebot, Axeptio, Hotjar, Microsoft Clarity, Trustpilot e Crisp. Os fornecedores mudam por vezes de domínio: consulte o separador de violações depois de ativar um serviço.

### Opções

- **Incluir os servidores de multimédia**: adiciona os servidores definidos em Parâmetros avançados > Desempenho às diretivas de imagens, scripts, estilos, tipos de letra e multimédia.
- **Atualizar pedidos inseguros**: envia `upgrade-insecure-requests` em modo Aplicar, numa loja em https.
- **URLs excluídos da CSP**: um fragmento de URL por linha. A CSP não é enviada quando o endereço pedido contém um deles, por exemplo uma página de regresso do pagamento problemática.

## Nonce e a nota A+

A configuração predefinida mantém `'unsafe-inline'` em `script-src`, porque os temas PrestaShop usam scripts inline. Os scanners limitam então a nota a A. Para procurar o A+:

1. No bloco **CSP estrita com nonce**, ative **Adicionar um nonce aos scripts** com o modo de teste ativo.
2. O módulo gera um nonce aleatório em cada página, adiciona-o a todas as etiquetas `` e remove `'unsafe-inline'` de `script-src`.
3. Percorra a loja e trate as violações. Os scripts inseridos depois por JavaScript sem nonce aparecem no registo, por exemplo as etiquetas HTML personalizadas do Google Tag Manager, que devem usar a variável nonce do GTM.
4. Quando o registo já não mostrar violações `eval`, remova `'unsafe-eval'` de `script-src`.

A opção **Manter os manipuladores de eventos inline** adiciona `script-src-attr 'unsafe-inline'` para que os atributos `onclick` continuem a funcionar. Mantenha-a ativa, a menos que o tema e os módulos não os usem; alguns scanners públicos assinalam-na.

Um módulo de cache de página completa guarda o HTML com o nonce do primeiro visitante, que deixa de corresponder aos seguintes. Exclua essas páginas da cache ou mantenha o nonce desativado. A cache nativa do PrestaShop não é afetada.

Para programadores: o nonce da página está disponível no Smarty como `{$dfsh_nonce}` e em PHP com `DfSecurityHeaders::getNonce()`. É adicionado automaticamente às etiquetas script da saída HTML; estes acessos servem para código produzido fora dessa saída.

## Registo de violações

Os relatórios dos navegadores são agrupados por diretiva e fonte bloqueada, com o número de ocorrências, a data do último aviso, uma página de exemplo e, para código inline, os seus primeiros caracteres. As extensões do navegador são ignoradas. Os URLs são guardados sem parâmetros e nenhum IP é conservado.

- **Permitir** adiciona a fonte à diretiva em causa. Se a diretiva estava vazia, recebe primeiro as fontes de `default-src`.
- **Ignorar** remove a linha sem alterar a CSP.
- As caixas de seleção permitem **Permitir a seleção** ou **Ignorar a seleção**. Os botões de diretiva e o campo de pesquisa filtram a lista.

Permitir uma violação `inline` ou `eval` adiciona `'unsafe-inline'` ou `'unsafe-eval'`, o que enfraquece a política: é preferível mover o script para um ficheiro. Com o nonce ativo, os scripts inline sem nonce não podem ser permitidos automaticamente. As violações não vistas há 30 dias são eliminadas automaticamente.

## HSTS e outros cabeçalhos

- **HSTS**: duração de 5 minutos a 2 anos, 1 ano por predefinição. Os navegadores memorizam o cabeçalho durante todo esse tempo e recusam http. `includeSubDomains` força https em todos os subdomínios: ative apenas se todos o suportarem. `preload` só é enviado com `includeSubDomains` e pelo menos 1 ano; submeta o domínio a hstspreload.org apenas se tiver a certeza, a remoção demora meses.
- **X-Frame-Options**: recomenda-se SAMEORIGIN; DENY também bloqueia os iframes da sua própria loja.
- **X-Content-Type-Options**: envia `nosniff`.
- **Referrer-Policy**: `strict-origin-when-cross-origin` por predefinição.
- **Cross-Origin-Opener-Policy**: desativada por predefinição; `same-origin-allow-popups` mantém a funcionar as janelas de pagamento do PayPal.
- **Remover o cabeçalho X-Powered-By** oculta a versão do PHP exposta por alguns servidores.

## Permissions-Policy

Para cada uma das 19 funcionalidades: **Bloqueado** desativa-a em todo o lado, **Apenas este site** permite-a no seu domínio e nas origens adicionais indicadas, **Todos os sites** abre-a, **Não definido** mantém o comportamento do navegador. As funcionalidades de que uma loja não precisa (câmara, microfone, geolocalização, sensores, USB...) estão bloqueadas por predefinição, e `payment` está limitado ao site. O serviço Stripe adiciona a sua própria origem a `payment`.

## Scanner e nota

**Analisar os cabeçalhos atuais** pede uma página da loja a partir do servidor e mostra a nota, o detalhe por cabeçalho, as fugas de informação e os cabeçalhos em bruto. Só os domínios da loja podem ser analisados. **Pré-visualizar produção** simula a configuração sem modo de teste. A nota segue a mesma ponderação dos scanners públicos e é indicativa. A última análise e o histórico de notas continuam visíveis depois de recarregar.

## Alertas de bloqueio

No separador Geral e modo de teste, ative os **Alertas por email** e indique até 5 destinatários. Com a CSP aplicada e o modo de teste desativado, cada recurso realmente bloqueado que nunca tinha sido visto gera um email com a diretiva, a fonte e a página. As novidades são agrupadas, no máximo um email por hora. **Enviar um email de teste** verifica a configuração; se nada chegar, verifique Parâmetros avançados > Email.

## Histórico, exportação e importação

Cada alteração guarda as definições anteriores, com a data, o funcionário e as diferenças face ao estado atual. São guardadas as 15 últimas versões; **Restaurar** volta a uma delas, e o estado substituído passa para o histórico.

**Transferir as definições** gera um ficheiro JSON sem os tokens secretos, para importar noutra loja, por exemplo da pré-produção para a produção. Uma importação ativa sempre o modo de teste. Os IP de teste também são importados: verifique-os.

## Cache, CDN e cabeçalhos do servidor

- Um CDN ou uma cache de página pode servir cabeçalhos antigos: limpe-a após cada alteração.
- Se o seu alojamento ou o Cloudflare já adiciona alguns cabeçalhos, o scanner assinala os duplicados. Remova-os no servidor ou desative o cabeçalho no módulo.
- Para que o servidor trate dos cabeçalhos, copie o bloco Apache ou Nginx do painel e depois desative o módulo. O envio de violações e o nonce, que dependem do módulo, não estão incluídos.

## Em caso de problema

- **Uma página deixou de funcionar**: restaure a versão anterior no histórico, ou volte a pôr a CSP em Report-Only enquanto corrige.
- **Desligar tudo**: desative **Enviar os cabeçalhos de segurança** no separador Geral, ou desative o módulo.
- **HSTS**: um navegador que recebeu HSTS recusa http até a duração expirar, mesmo depois de o módulo ser desativado. É por isso que os dispositivos de teste recebem apenas 5 minutos.
