Content-Security-Policy sem quebrar o seu site
Um CSP diz ao navegador em quais origens de scripts, estilos e imagens confiar. É a sua melhor defesa contra scripts injetados e skimmers de cartão, e recompensa uma implantação cuidadosa.
O código e a configuração ficam em inglês.
1. Comece em modo somente relatório
O navegador informa as violações no console, mas não bloqueia nada.
add_header Content-Security-Policy-Report-Only "default-src 'self'; img-src 'self' data: https:; script-src 'self'; style-src 'self' 'unsafe-inline'; frame-ancestors 'self'; object-src 'none'; base-uri 'self'" always;2. Navegue pelo site e leia o console
Abra DevTools → Console nas páginas principais (início, um produto, o carrinho e o checkout, o formulário de contato). Cada origem bloqueada aparece ali. Adicione as confiáveis, como https://www.googletagmanager.com ou o seu provedor de pagamento, à diretiva correspondente.
3. Aplique
Quando o console estiver tranquilo, renomeie o cabeçalho para Content-Security-Policy. Mantenha o cabeçalho somente relatório ao lado enquanto testa uma versão mais rígida.
Header always set Content-Security-Policy "default-src 'self'; img-src 'self' data: https:; script-src 'self' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline'; frame-ancestors 'self'; object-src 'none'; base-uri 'self'"Dicas para WordPress
- Muitos temas e plugins usam scripts inline. No começo, você pode precisar de
'unsafe-inline'emscript-src. É mais fraco, masframe-ancestors,object-srcebase-uricontinuam ajudando. - Para uma política rígida, use nonces: o WordPress 5.7+ consegue adicionar atributos a scripts impressos com
wp_print_inline_script_tag(). - Coloque primeiro um CSP rígido no checkout, onde ele mais importa.
Diretivas úteis
frame-ancestors 'self': o substituto moderno do X-Frame-Options.upgrade-insecure-requests: troca automaticamente recursos http:// por https://.connect-src: limita para onde os scripts podem enviar dados, o que ajuda contra skimmers.