Content Security Policy com nonce: o guia definitivo
Segurança Web

Content Security Policy com nonce: o guia definitivo

9 min de leitura

CSP com nonce elimina unsafe-inline sem bloquear scripts legítimos. Aprenda a gerar nonces por request, aplicar no Slim e depurar violações.

Por que CSP com nonce?

Content Security Policy bloqueia scripts não autorizados, prevenindo XSS mesmo quando o atacante injeta código no HTML. A abordagem com nonce é mais flexível que hash — o valor muda por request, tornando impossível pre-computar um ataque.

Gerando o nonce

O nonce deve ser criptograficamente aleatório e único por request. No PHP:

$nonce = base64_encode(random_bytes(16));

O mesmo nonce é usado no header HTTP e nas tags <script nonce="...">.

strict-dynamic

Com strict-dynamic, scripts com nonce podem carregar outros scripts dinamicamente — sem precisar listá-los explicitamente na política. Isso é essencial para bundlers como Vite que geram imports dinâmicos.

Depurando violações

Antes de enforçar a CSP em produção, use Content-Security-Policy-Report-Only para coletar violações sem bloquear nada. O header report-uri ou report-to envia os relatórios para um endpoint que você controla.

  • Nunca use unsafe-inline — ele anula toda a proteção
  • Evite unsafe-eval — bloqueia eval() e Function() construtor
  • Teste com DevTools → Console → violações de CSP