Utilia

Générateur de hachage SRI

Générez le hash SRI (Subresource Integrity) sha384 d'un fichier JavaScript ou CSS et copiez les attributs integrity et crossorigin prêts à l'emploi, en local.

Collez le contenu du fichier ou ouvrez le fichier lui-même : cet outil ne télécharge pas d’URL. Lire un script hébergé ailleurs exigerait que ce serveur l’autorise (CORS) ou qu’un serveur à nous le récupère pour vous, alors que rien de ce que vous hachez ici ne quitte votre navigateur. Hachez exactement le fichier que vous allez servir.

Calculer à partir

Le texte est haché en UTF-8. Les navigateurs convertissent les fins de ligne Windows (CRLF) en LF dans le texte collé, et un seul octet modifié change le hash : en cas de doute, ouvrez directement le fichier.

Algorithmes

L’URL est seulement écrite dans la balise, elle n’est jamais appelée. Laissez le champ vide pour utiliser le nom du fichier.

Comment générer un hash SRI

  1. Sous Calculer à partir, choisissez d’un code collé ou de fichiers.
  2. Collez le contenu exact du script ou de la feuille de style dans Contenu du script ou de la feuille de style puis cliquez sur Générer le hash SRI, ou déposez un ou plusieurs fichiers .js et .css dans la zone prévue. Le hash se met à jour pendant la saisie.
  3. Laissez SHA-384 (recommandé) coché, ou ajoutez SHA-256 et SHA-512. Chaque algorithme coché ajoute un jeton à la valeur.
  4. Choisissez la Balise (automatique d’après le nom du fichier, <script>, <script type="module"> ou <link rel="stylesheet">), saisissez l’URL de la ressource pour la balise (facultatif) et le mode crossorigin.
  5. Copiez la Valeur integrity ou la balise complète.
  6. Pour contrôler une balise existante, collez sa valeur ou la balise entière dans Vérifier une valeur integrity existante (facultatif).

À quoi sert l’intégrité des sous-ressources ?

Quand une page charge un script depuis un CDN, le navigateur fait confiance à tout ce que ce serveur renvoie. Si le CDN est piraté ou si le fichier est modifié, le code altéré s’exécute avec un accès complet à votre page. Le mécanisme Subresource Integrity (SRI, norme du W3C) comble cette faille : vous indiquez l’empreinte attendue du fichier dans l’attribut integrity, le navigateur calcule celle du fichier téléchargé et refuse d’exécuter le script ou d’appliquer la feuille de style si elles diffèrent.

<script src="https://cdn.example.com/lib.min.js"
        integrity="sha384-H8BRh8j48O9oYatfu5AZzq6A9RINhZO5H16dQZngK7T62em8MUt1FLm52t+eX6xO"
        crossorigin="anonymous"></script>

La valeur se compose du nom de l’algorithme, d’un tiret et de l’empreinte des octets du fichier encodée en Base64. L’exemple ci-dessus est le hash de alert('Hello, world.'); tiré de la spécification SRI. Si plusieurs hash sont indiqués, le navigateur ne retient que l’algorithme le plus fort présent et accepte le fichier si l’un des hash de cet algorithme correspond : c’est ainsi qu’un site peut autoriser deux versions d’un fichier pendant une mise à jour.

Pourquoi l’attribut crossorigin est indispensable

Pour un fichier hébergé sur une autre origine, le navigateur ne peut vérifier l’intégrité que si la réponse est obtenue en mode CORS : la balise doit porter l’attribut crossorigin et le serveur doit répondre avec l’en-tête Access-Control-Allow-Origin. Utilisez anonymous (sans cookies) pour les CDN publics ; use-credentials est réservé à de rares ressources privées. Sans CORS, le navigateur bloque le fichier au lieu de le charger sans contrôle.

Pourquoi cet outil ne télécharge pas d’URL

Cet outil calcule uniquement le hash du code collé ou des fichiers ouverts. Télécharger un script depuis son URL dans la page ne fonctionnerait que si ce serveur autorise les lectures depuis une autre origine, et contourner cette limite exigerait un serveur intermédiaire, qui verrait aussi ce que vous hachez. Ici, tout se passe dans votre navigateur. Le plus simple est de télécharger exactement le fichier que vous allez référencer (même version, même fichier minifié) puis de l’ouvrir ici.

Questions fréquentes

Quel algorithme choisir ?

SHA-384 est le choix habituel et celui que publient la plupart des CDN. SHA-256 et SHA-512 sont aussi pris en charge par tous les navigateurs récents. MD5 et SHA-1 ne sont pas acceptés par SRI.

Mon hash est juste, mais le navigateur bloque le fichier. Pourquoi ?

Vérifiez que le serveur envoie Access-Control-Allow-Origin et que la balise contient crossorigin. Assurez-vous aussi que le CDN sert exactement les mêmes octets : une autre version, une minification automatique ou un saut de ligne final manquant suffisent à changer le hash.

Pourquoi le code collé ne donne-t-il pas le même hash que le fichier ?

Les navigateurs convertissent les fins de ligne Windows (CRLF) en LF dans les champs de texte, et un éditeur peut ajouter ou retirer une marque d’ordre des octets (BOM) ou un saut de ligne final. Ouvrez directement le fichier pour hacher ses octets exacts.

Faut-il SRI pour les fichiers de mon propre domaine ?

SRI protège contre toute modification postérieure au calcul du hash : c’est surtout utile pour les hébergeurs tiers. Pour vos propres fichiers, un outil de build qui génère les hash lors de la compilation est souvent plus pratique.

SRI fonctionne-t-il pour les images ou les polices ?

L’attribut integrity est pris en charge sur <script> et <link rel="stylesheet"> (ainsi que sur <link rel="preload"> ou modulepreload pour ces fichiers). Les images et les polices ne peuvent pas l’utiliser.