1001Ferramentas
🔏 Segurança

Gerador de hash CSP para inline scripts

Gere o hash SHA-256/384/512 em base64 de um script inline para permiti-lo na sua Content-Security-Policy (CSP) sem usar nonce. Reforce a segurança do seu site.

Liberar um script inline sem abrir mão da CSP

Uma Content-Security-Policy que inclui unsafe-inline em script-src está, na prática, desligada contra XSS: qualquer script injetado na página passa a executar. Só que quase todo site tem um punhado de scripts inline legítimos — o snippet de analytics, um bloco de configuração, o handler de um formulário. O hash resolve esse impasse: você autoriza aquele conteúdo exato, e nenhum outro.

Cole o conteúdo do script — só o que está entre as tags, sem as tags — escolha o algoritmo e a página devolve a referência pronta no formato 'sha256-…', junto com a linha completa do cabeçalho. O hash é calculado pelo WebCrypto do próprio navegador e o resultado sai em base64, exatamente como a especificação da CSP espera.

O detalhe que faz a maioria das tentativas falhar é a exatidão byte a byte. Um espaço a mais na indentação, uma quebra de linha final que o editor adicionou, um comentário removido depois: qualquer diferença muda o hash e o navegador bloqueia o script. Copie o conteúdo do HTML já servido, não do arquivo de origem, e confira no console qual hash o navegador esperava — ele imprime o valor certo na mensagem de bloqueio.

Perguntas frequentes

O hash cobre também as tags de abertura e fechamento?
Não. Ele cobre apenas o texto entre a tag de abertura e a de fechamento. Atributos como type ou id ficam de fora, e mudá-los não invalida o hash — mas mudar qualquer caractere do corpo, inclusive espaço em branco, invalida.
Hash ou nonce, qual usar?
Hash funciona bem para conteúdo estático que não muda entre requisições, porque você calcula uma vez e coloca na política. Nonce é melhor quando o script é gerado dinamicamente: o servidor sorteia um valor por resposta e repete nele o atributo nonce. O que não vale é usar nonce fixo, que equivale a liberar tudo.
Isso funciona para CSS inline e para handlers onclick?
Para bloco de CSS inline sim, com a mesma sintaxe em style-src. Para atributos de evento no HTML, como onclick, o hash não se aplica: eles só executam com unsafe-inline, e o caminho recomendado é movê-los para addEventListener dentro de um script que a política já autoriza.

Ferramentas Relacionadas