Skip to main content
Validação HTML

Valor inválido X para o atributo “integrity” no elemento “script”: Valor base64 inválido (deve ser múltiplo de 4 bytes).

Sobre este problema HTML

O atributo integrity ativa a Integridade de Sub-recursos (SRI), uma funcionalidade de segurança que permite aos navegadores verificar se um recurso obtido (como um ficheiro JavaScript de um CDN) não foi adulterado. O valor do atributo segue o formato [algoritmo]-[hash codificado em base64], onde o algoritmo é tipicamente sha256, sha384, ou sha512, e o hash é uma representação base64 do digest criptográfico do ficheiro.

A codificação base64 funciona convertendo dados binários numa string de caracteres ASCII retirados de um alfabeto de 64 caracteres. Uma propriedade chave do base64 válido é que a saída codificada deve sempre ter um comprimento que seja múltiplo de 4. Quando os dados binários brutos não se dividem uniformemente, a saída é preenchida com um ou dois caracteres = para atingir o comprimento correto. Se a string base64 no seu atributo integrity tiver um comprimento incorreto — por exemplo, foi truncada, editada manualmente ou copiada incompletamente — o validador irá marcá-la como inválida.

Isto é importante por várias razões:

  • Segurança: Se o valor integrity estiver malformado, o navegador não consegue verificar o recurso. Dependendo do navegador, pode bloquear o script completamente, quebrando a funcionalidade do seu site.
  • Conformidade com padrões: A especificação HTML requer que a porção do hash seja uma string base64 válida. Um valor inválido é um erro de conformidade.
  • Fiabilidade: Um hash malformado nunca corresponderá a qualquer ficheiro, pelo que a verificação SRI falhará sempre, tornando efetivamente o script inutilizável.

Causas comuns deste erro incluem:

  • Copiar o valor do hash incompletamente (faltando o preenchimento = final ou outros caracteres).
  • Modificar manualmente a string do hash.
  • Usar uma ferramenta que produziu uma saída codificada incorretamente.
  • Confundir codificações base64 e base64url (base64url usa - e _ em vez de + e /, e frequentemente omite o preenchimento).

Para corrigir o problema, regenere o hash SRI correto para o ficheiro exacto que está a ser referenciado. Pode fazer isto com a linha de comandos:

openssl dgst -sha384 -binary script.js | openssl base64 -A

Ou usando shasum e base64:

shasum -b -a 384 script.js | awk '{print $1}' | xxd -r -p | base64

Ferramentas online como o SRI Hash Generator também podem produzir o valor correto. Após gerar o hash, adicione o prefixo do algoritmo (ex., sha384-) e verifique que a porção base64 tem um comprimento divisível por 4.

Exemplos

Incorreto: Valor base64 malformado

O hash abaixo não é uma string base64 válida — o seu comprimento não é múltiplo de 4, e contém o caractere !, que não está no alfabeto base64.

<script
  src="https://cdn.example.com/library.js"
  integrity="sha384-BadBase64Value!"
  crossorigin="anonymous"></script>

Incorreto: Hash truncado sem preenchimento

Este hash foi acidentalmente truncado, perdendo os caracteres de preenchimento = finais que o tornariam numa string base64 válida.

<script
  src="https://cdn.example.com/library.js"
  integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9Gh8S7f1bE0q/PuF3LtHac+obYTK2B69B1a8t"
  crossorigin="anonymous"></script>

Correto: Hash SRI formatado adequadamente

O hash base64 tem o comprimento correto (múltiplo de 4) e usa apenas caracteres base64 válidos. O T final completa o grupo final de 4 caracteres sem precisar de preenchimento neste caso, mas outros hashes podem terminar com = ou ==.

<script
  src="https://cdn.example.com/library.js"
  integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9Gh8S7f1bE0q/PuF3LtHac+obYTK2B69B1a8tT"
  crossorigin="anonymous"></script>

Correto: Múltiplos hashes para fallback

Pode fornecer múltiplos valores de hash separados por espaços. Cada um deve ser independentemente base64 válido com o comprimento correto.

<script
  src="https://cdn.example.com/library.js"
  integrity="sha256-BpfGp+xz0kN9mMKoECQbGRab7fMi/dsRZ7Sy7LVd3CE= sha384-oqVuAfXRKap7fdgcCY5uykM6+R9Gh8S7f1bE0q/PuF3LtHac+obYTK2B69B1a8tT"
  crossorigin="anonymous"></script>

Certifique-se sempre de que o hash é gerado a partir do ficheiro exacto para o qual o atributo src aponta. Se o CDN servir uma versão diferente ou uma variante minificada, o hash não corresponderá, e o navegador bloqueará o recurso independentemente de a codificação base64 ser válida.

Encontre problemas como este automaticamente

O Rocket Validator analisa milhares de páginas em segundos, detetando problemas HTML em todo o seu site.

Ajude-nos a melhorar os nossos guias

Este guia foi útil?

Pronto para validar os seus sites?
Comece o seu teste gratuito hoje.