PS PrestaShop Intermédio

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

Instalar e configurar o Security Headers: modo de teste, CSP e violações, nonce e nota A+, HSTS, Permissions-Policy, scanner, alertas e histórico.

Atualizado Versão do módulo 1.1.0

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 <script> 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.
Esta página foi útil?

Ainda com dúvidas? Contacte o suporte