Gerador de hash SRI
Gera hashes Subresource Integrity (SRI) sha384 para um ficheiro JavaScript ou CSS e copia os atributos integrity e crossorigin prontos a usar.
Cola o conteúdo do ficheiro ou abre o próprio ficheiro: esta ferramenta não descarrega URLs. Ler um script de outro site exigiria que esse servidor o permitisse (CORS) ou que um servidor nosso o fosse buscar por ti, e nada do que calculas aqui sai do teu navegador. Calcula o hash do ficheiro exato que vais servir.
O texto é processado como UTF-8. Os navegadores convertem os fins de linha do Windows (CRLF) em LF no texto colado, e um único byte diferente estraga o hash: na dúvida, abre o próprio ficheiro.
O URL só é escrito no snippet, nunca é pedido. Deixa-o vazio para usar o nome do ficheiro.
Como gerar um hash SRI
- Em Calcular hash de, escolhe Código colado ou Ficheiros.
- Cola o conteúdo exato do script ou da folha de estilos em Conteúdo do script ou da folha de estilos e clica em Gerar hash SRI, ou larga um ou mais ficheiros
.jse.cssna zona de largar. Os hashes atualizam-se enquanto escreves. - Mantém SHA-384 (recomendado) marcado, ou acrescenta SHA-256 e SHA-512. Cada algoritmo marcado acrescenta um elemento ao valor.
- Escolhe a Etiqueta (automática pelo nome do ficheiro,
<script>,<script type="module">ou<link rel="stylesheet">), escreve o URL do recurso para o snippet (opcional) e escolhe o modocrossorigin. - Copia o valor integrity ou a etiqueta completa.
- Para verificar uma etiqueta que já usas, cola o valor ou a etiqueta inteira em Verificar um valor integrity existente (opcional).
O que faz o Subresource Integrity
Quando uma página carrega um script de uma CDN, o navegador confia em tudo o que esse servidor devolver. Se a CDN for comprometida ou o ficheiro for alterado, o código modificado corre com acesso total à tua página. O Subresource Integrity (SRI do W3C) fecha essa brecha: publicas o hash esperado do ficheiro no atributo integrity, o navegador calcula o hash do que descarrega e recusa executar o script ou aplicar a folha de estilos se os dois forem diferentes.
<script src="https://cdn.example.com/lib.min.js"
integrity="sha384-H8BRh8j48O9oYatfu5AZzq6A9RINhZO5H16dQZngK7T62em8MUt1FLm52t+eX6xO"
crossorigin="anonymous"></script>
O valor é o nome do algoritmo, um hífen e o resumo (digest) em Base64 dos bytes do ficheiro. Esse exemplo é o hash de alert('Hello, world.'); tirado da especificação SRI. Quando são indicados vários hashes, os navegadores só olham para o algoritmo mais forte presente e aceitam o ficheiro se qualquer hash desse algoritmo corresponder. É assim que um site pode indicar duas versões de um ficheiro durante uma atualização.
Porque é que o crossorigin é obrigatório
Para um ficheiro noutra origem, o navegador só consegue verificar a integridade se a resposta for obtida em modo CORS, por isso a etiqueta precisa de um atributo crossorigin e o servidor tem de responder com um cabeçalho Access-Control-Allow-Origin. Usa anonymous (sem cookies) para CDNs públicas; use-credentials serve para os raros recursos privados. Sem CORS, o navegador bloqueia o ficheiro em vez de o carregar sem verificação.
Porque é que esta ferramenta não descarrega URLs
Esta ferramenta só calcula o hash do código que colas ou dos ficheiros que abres. Descarregar um script a partir do URL dentro da página só funcionaria se esse servidor permitisse leituras de outras origens, e contornar isso exigiria um servidor que fosse buscar o ficheiro por ti, que também veria aquilo de que calculas o hash. Aqui tudo corre no teu navegador. O método mais simples é descarregares o ficheiro exato que vais referenciar (a mesma versão e a mesma build minificada) e abri-lo aqui.
Perguntas frequentes
Que algoritmo devo usar?
O SHA-384 é a escolha habitual e o que a maioria das CDNs publica. O SHA-256 e o SHA-512 também são suportados por todos os navegadores modernos. O MD5 e o SHA-1 não são permitidos no SRI.
O meu hash está certo, mas o navegador continua a bloquear o ficheiro. Porquê?
Confirma que o servidor envia Access-Control-Allow-Origin e que a etiqueta tem crossorigin. Verifica também se a CDN serve exatamente os mesmos bytes: uma versão diferente, um minificador automático ou a falta de uma quebra de linha final alteram o hash.
Porque é que o código colado dá um hash diferente do ficheiro?
Os navegadores convertem os fins de linha do Windows (CRLF) em LF nos campos de texto, e um editor pode acrescentar ou retirar uma marca de ordem de bytes (BOM) ou uma quebra de linha final. Abre o próprio ficheiro para calcular o hash dos bytes exatos.
Preciso de SRI para ficheiros no meu próprio domínio?
O SRI protege contra alterações feitas depois de calculares o hash, por isso é mais importante para alojamentos de terceiros. Para os teus próprios ficheiros, um bundler que gera os hashes no momento da build costuma ser mais prático.
O SRI funciona com imagens ou tipos de letra?
O atributo integrity é suportado em <script> e <link rel="stylesheet"> (e em <link rel="preload"> ou modulepreload para estes recursos). As imagens e os tipos de letra não o podem usar.
Ferramentas relacionadas
- Gerador de hash Gera hashes MD5, SHA-1, SHA-256 e SHA-512 de texto ou de ficheiros de qualquer tamanho e verifica checksums. Tudo corre no teu navegador.
- Codificador e descodificador Base64 Codifica e descodifica Base64 online, com suporte completo de UTF-8 e a opção base64url segura para URL. Tudo no teu navegador, nada é enviado.
- Visualizador de ficheiros HAR Abre um ficheiro .har no navegador para inspecionar pedidos, cabeçalhos, cookies, tempos e a cascata, e limpa-o antes de o partilhar. Nada é enviado.