Ir para o conteúdo principal
Bethemesh

Gerador de hash SRI

Calcule o valor integrity de Subresource Integrity em SHA-256, SHA-384 ou SHA-512 a partir de um conteúdo colado, de um ficheiro local ou de um URL de CDN e copie a etiqueta <script> ou <link> pronta a usar com crossorigin="anonymous".

  • Área de transferência

Integrar este widget

Personalize o resultado, verifique a pré-visualização e copie o código.

Pré-visualização

Tipo de código de integração

Código a copiar

Responsivo e redimensionado automaticamente pela Bethemesh.

Recurso

Descarregado pelo seu navegador: o CDN tem de permitir CORS (jsDelivr, cdnjs e unpkg permitem).

Integridade

Esta ferramenta foi útil?

Como funciona esta ferramenta?

Este gerador calcula o valor integrity de Subresource Integrity (SRI) de um script ou de uma folha de estilos e produz a etiqueta HTML correspondente. Destina-se a programadores que carregam bibliotecas a partir de uma CDN e querem que o navegador bloqueie qualquer ficheiro alterado.

A Subresource Integrity (especificação do W3C) permite acrescentar a uma etiqueta <script> ou <link rel="stylesheet"> um atributo integrity com o hash esperado do recurso. O valor é composto pelo nome do algoritmo, um hífen e o hash binário codificado em Base64: um ficheiro que contém exatamente console.log("hello"); dá sha384-ym/3cF/gAcW1/eerNQGFaOSOuU2LHI6RYvChaVur/G+PkVozZ5Zo8Uu5R2S2zm7C. Ao carregar, o navegador recalcula o hash dos bytes recebidos e recusa-se a executar o script ou a aplicar a folha de estilos se não coincidir. Apenas SHA-256, SHA-384 e SHA-512 são admitidos; o SHA-384 é o valor predefinido, tal como nos exemplos da especificação e do MDN.

Para um recurso de outra origem, o navegador tem de conseguir ler a resposta para calcular o hash, o que exige um pedido CORS: o atributo crossorigin="anonymous" na página e um cabeçalho Access-Control-Allow-Origin enviado pela CDN. Por isso, a ferramenta acrescenta crossorigin="anonymous" aos atributos e à etiqueta gerada. No modo URL, o seu navegador transfere o ficheiro diretamente, sem servidor intermédio; funciona com as CDN que permitem CORS, como jsDelivr, cdnjs ou unpkg. O cálculo equivalente na linha de comandos é openssl dgst -sha384 -binary ficheiro.js | openssl base64 -A.

Como usar esta ferramenta

  1. Escolha a origem

    Cole o conteúdo do ficheiro, selecione um ficheiro local ou introduza o URL de uma CDN: neste último caso, o seu navegador transfere o ficheiro diretamente.

  2. Defina o algoritmo e o tipo

    Mantenha o SHA-384 predefinido ou escolha SHA-256 ou SHA-512 e indique se se trata de um script ou de uma folha de estilos.

  3. Copie o resultado

    Obtenha apenas o valor integrity, os atributos integrity e crossorigin="anonymous" ou a etiqueta <script> ou <link rel="stylesheet"> completa.

Integridade SRI

Integridade SRI

integrity = algoritmo + '-' + Base64(HASH(bytes do recurso))

Casos de uso

Proteger uma biblioteca carregada a partir do jsDelivr

Introduza o URL com versão, por exemplo https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css, para obter a etiqueta <link> com integrity. Se a CDN for comprometida e servir outro ficheiro, o navegador bloqueia-o.

Atualizar o hash após uma mudança de versão

Cada nova versão de um ficheiro altera o respetivo hash. Recalcule o atributo integrity logo que altere o URL com versão; caso contrário, o recurso será bloqueado em produção.

Cumprir um requisito PCI DSS nas páginas de pagamento

O PCI DSS 4.0 (requisito 6.4.3) exige garantir a integridade de cada script carregado numa página de pagamento. A SRI é um dos meios habituais para scripts de terceiros com conteúdo estável: gere o valor integrity de cada um.

Exemplos

Integridade SHA-256 do texto abc

Entrada

Recurso: Conteúdo colado; Conteúdo do recurso (UTF-8): abc; Algoritmo: SHA-256

Resultado

Valor integrity: sha256-ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0=

Dicas e boas práticas

  • Utilize sempre um URL fixado numa versão exata: um URL «latest» ou sem versão muda de conteúdo e invalida o hash na publicação seguinte.
  • Não utilize SRI em recursos gerados dinamicamente, como a folha de estilos do Google Fonts, cujo conteúdo varia consoante o navegador: o hash mudaria de um visitante para outro.
  • Calcule o hash exatamente do ficheiro servido: uma versão minificada, recomprimida ou com outras quebras de linha não tem o mesmo hash do ficheiro de origem.

Fontes e referências

Perguntas frequentes

O que é a Subresource Integrity (SRI)?

É uma funcionalidade de segurança dos navegadores, normalizada pelo W3C, que verifica se um ficheiro carregado a partir de terceiros não foi alterado. Indica o hash esperado no atributo integrity; se o ficheiro recebido não coincidir, não é executado nem aplicado. Protege contra uma CDN comprometida ou um ficheiro alterado pelo caminho.

Devo escolher SHA-256, SHA-384 ou SHA-512?

Os três são aceites e seguros. O SHA-384 é a escolha mais comum e o valor predefinido da ferramenta; o SHA-512 também serve e o SHA-256 continua válido. Pode indicar vários valores separados por um espaço em integrity: o navegador usa então o algoritmo mais forte.

Porque é necessário crossorigin="anonymous"?

Para um recurso de outra origem, o navegador só consegue ler o conteúdo, e portanto verificar o hash, através de um pedido CORS. Sem o atributo crossorigin, a resposta é opaca e o recurso é bloqueado. O valor anonymous indica que não são enviados cookies nem credenciais com o pedido.

O que acontece se o hash não coincidir?

O navegador rejeita o recurso e mostra na consola um erro como «Failed to find a valid digest in the 'integrity' attribute». O script não é executado ou a folha de estilos não é aplicada, o que pode estragar a página. Verifique se o URL tem versão e volte a gerar o hash a partir do ficheiro efetivamente servido.

Porque falha o carregamento a partir de um URL?

O seu navegador transfere o ficheiro e aplica as regras CORS: se o servidor não enviar um cabeçalho Access-Control-Allow-Origin, a leitura é recusada. Nesse caso, a SRI também não funcionaria para esse ficheiro carregado a partir de outro domínio. Transfira-o e utilize o modo ficheiro, ou escolha uma CDN compatível com CORS, como jsDelivr, cdnjs ou unpkg.

A SRI substitui uma Content Security Policy?

Não, as duas complementam-se. A SRI garante que um ficheiro concreto não mudou, enquanto uma CSP limita as origens que podem fornecer scripts e bloqueia scripts injetados. Num site que depende de CDN, combine uma CSP restritiva com SRI em cada recurso de terceiros.

Ferramentas relacionadas

Ferramentas semelhantes ou complementares a esta.

Ferramentas semelhantes

Crie uma Content Security Policy diretiva a diretiva, com cabeçalho HTTP, etiqueta meta e avisos.

Segurança e privacidadeUtilizar esta ferramenta

Gere HSTS, nosniff, Referrer-Policy, Permissions-Policy, COOP/COEP/CORP e X-Frame-Options para Nginx ou Apache.

Segurança e privacidadeUtilizar esta ferramenta

Calcule de uma só vez os hashes MD5, SHA-1, SHA-256, SHA-384 e SHA-512 de um texto ou ficheiro.

Segurança e privacidadeEm destaqueUtilizar esta ferramenta