Uma Content Security Policy indica ao navegador que fontes de conteúdo são autorizadas. É especialmente útil para limitar o impacto de algumas injeções de scripts e impedir carregamentos provenientes de origens inesperadas.
Uma CSP é uma lista de autorizações
Diretivas como default-src, script-src, style-src, img-src, connect-src e frame-ancestors cobrem diferentes famílias de recursos. Uma política eficaz deve refletir as necessidades reais da aplicação, em vez de acumular domínios “por precaução”.
Um gerador CSP pode fornecer uma base legível, mas deve ser tratado como ponto de partida para testes, não como garantia automática de segurança.
Avançar progressivamente
Aplicar imediatamente uma política extremamente restritiva num site existente pode quebrar analytics, widgets, tipos de letra, imagens ou chamadas API. É mais seguro inventariar os recursos, construir uma política mínima, testar páginas críticas e apertar gradualmente as regras.
Evite resolver todos os erros acrescentando wildcards demasiado amplos. Cada exceção deve corresponder a uma necessidade compreendida.
Nonces, hashes e scripts inline
Os scripts inline são um ponto delicado. Nonces e hashes permitem autorizar conteúdos específicos sem abrir globalmente unsafe-inline. A escolha depende da arquitetura e da forma como as páginas são geradas.
unsafe-eval também merece uma decisão consciente: permite certas formas de avaliação dinâmica de código e deve ser evitado quando uma biblioteca ou configuração diferente elimina essa necessidade.
frame-ancestors e iframes
A diretiva frame-ancestors controla que origens podem integrar a página numa iframe. Contribui para limitar certas formas de clickjacking e complementa outros cabeçalhos de segurança.
Compreender o fallback das diretivas
default-src funciona como regra de fallback para várias categorias quando não existe uma diretiva mais específica. Assim que define script-src, são as regras desta diretiva que se aplicam aos scripts.
Uma política típica distingue pelo menos scripts, estilos, imagens, ligações de rede e frames. Conforme o site, font-src, media-src, worker-src, object-src, base-uri ou form-action também podem ser importantes. O objetivo não é usar todas as diretivas, mas descrever com precisão o comportamento esperado.