Integridade SRI
integrity = algoritmo + '-' + Base64(HASH(bytes do recurso))
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".
Descarregado pelo seu navegador: o CDN tem de permitir CORS (jsDelivr, cdnjs e unpkg permitem).
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.
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.
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.
Obtenha apenas o valor integrity, os atributos integrity e crossorigin="anonymous" ou a etiqueta <script> ou <link rel="stylesheet"> completa.
integrity = algoritmo + '-' + Base64(HASH(bytes do recurso))
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.
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.
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.
Entrada
Recurso: Conteúdo colado; Conteúdo do recurso (UTF-8): abc; Algoritmo: SHA-256Resultado
Valor integrity: sha256-ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0=É 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.
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.
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 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.
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.
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.
Crie uma Content Security Policy diretiva a diretiva, com cabeçalho HTTP, etiqueta meta e avisos.
Gere HSTS, nosniff, Referrer-Policy, Permissions-Policy, COOP/COEP/CORP e X-Frame-Options para Nginx ou Apache.
Calcule de uma só vez os hashes MD5, SHA-1, SHA-256, SHA-384 e SHA-512 de um texto ou ficheiro.
Saiba como o SRI utiliza uma impressão digital criptográfica para verificar se um script ou uma folha de estilos externa corresponde ao ficheiro esperado.
Compreenda as diferentes camadas de segurança de um site Web: HTTPS, cabeçalhos HTTP, CSP, SRI, autenticação, palavras-passe e integridade.
Distinga hash, cifragem e assinatura e utilize impressões para verificar igualdade ou integridade sem lhes atribuir falsas garantias.
Saiba quando usar criptografia, hashing, HMAC ou PBKDF2 para confidencialidade, integridade, autenticação e palavras-passe.