1001Ferramentas
🎲 Segurança

Gerador de nonce CSP seguro

Gera nonce aleatório base64 de 128 bits para Content-Security-Policy com exemplo de header e atributo <script nonce>.

Nonce de CSP sem quebrar a política

Você quer tirar o unsafe-inline do script-src, mas a página tem um punhado de scripts inline que não dá para mover hoje. A saída conhecida é o nonce: um valor aleatório que aparece no header e na tag, de modo que só os scripts marcados com ele executam. A dúvida que trava a implementação costuma ser o formato exato do header e quanta aleatoriedade basta.

O valor sai do crypto.getRandomValues do navegador, que é um gerador criptográfico e não o Math.random. O padrão são 16 bytes, ou 128 bits, que viram 24 caracteres em base64. O campo aceita de 16 a 64 bytes e corrige sozinho o que estiver fora dessa faixa. A saída já mostra o header pronto e a tag script com o atributo, e os dois precisam carregar exatamente o mesmo valor, senão o navegador bloqueia o script.

Vai o aviso que mais importa: nonce copiado de uma página web e colado em template estático não protege nada. Ele precisa ser sorteado a cada resposta HTTP, no servidor, e injetado no header e no HTML da mesma requisição. Use esta caixa para conferir formato, montar um teste com curl ou escrever documentação. Lembre também que, com nonce presente, navegadores modernos passam a ignorar o unsafe-inline.

Perguntas frequentes

Posso usar o mesmo nonce em todas as páginas?
Não. Um nonce fixo é previsível, e quem conseguir injetar HTML na página passa a burlar a política. Sorteie um valor novo por resposta.
128 bits de entropia bastam?
Sim. A especificação do CSP recomenda pelo menos 128 bits, que é justamente o padrão desta caixa. Subir para 32 bytes não faz mal, só alonga o header.
Preciso manter o unsafe-inline junto do nonce?
Só se você ainda atende navegadores antigos sem suporte a nonce. Quem entende nonce ignora o unsafe-inline, então ele funciona apenas como reserva.

Ferramentas Relacionadas