← Toutes les vérifications
SécuritéSévérité typique: Faible

Vérificateur de SRI

Détecte les scripts et styles chargés depuis des CDN externes sans l'attribut integrity qui les vérifie.

Ce qu'elle vérifie

Ce scanner passe en revue les scripts et feuilles de style que ta page charge depuis des CDN ou des origines externes et vérifie s'ils incluent l'attribut integrity. Cet attribut permet au navigateur de vérifier que le fichier reçu est exactement celui attendu.

Pourquoi ça compte

Sans l'attribut integrity, si le CDN externe est compromis ou altéré, ton site exécuterait du code modifié sans s'en rendre compte. Un attaquant pourrait injecter des scripts malveillants qui volent les données de tes utilisateurs directement depuis leur navigateur.

Comment la corriger

Ajoute l'attribut integrity avec le hash du fichier à chaque script et style que tu charges depuis une origine externe, avec crossorigin. Beaucoup d'outils et les CDN eux-mêmes fournissent le hash prêt à copier, ou tu peux héberger la ressource toi-même.

Comment fonctionne cette vérification

Scanaris parcourt le HTML de ta page principale et s'intéresse à deux types de balise : <script src="..."> et <link rel="stylesheet" href="...">. Il résout chaque URL par rapport à celle de la page et la considère externe si son origine (schéma, domaine et port) diffère de la tienne ; cela inclut les URL commençant par //, qui chargent depuis le CDN avec le protocole de la page. Il ignore data: et blob:. Pour chaque ressource externe, il vérifie la présence de l'attribut integrity ; s'il manque, il la note. S'il y en a au moins une, il ouvre un constat de sévérité faible avec le nombre de ressources et les dix premières URL. Les scripts et styles de ton propre domaine ne sont pas signalés : le SRI n'y apporte rien.

Pourquoi c'est important

Quand tu charges une bibliothèque depuis un CDN, tu exécutes dans le navigateur de tes utilisateurs ce que ce CDN décide de servir. Si le CDN est compromis, ou si son domaine change de mains, le fichier peut être remplacé par un autre qui fait la même chose et en plus vole les formulaires ou redirige vers des arnaques. C'est arrivé en juin 2024 avec polyfill.io : le domaine a été vendu, le script s'est mis à injecter du code malveillant et plus de cent mille sites qui l'incluaient l'ont servi sans s'en apercevoir. L'attribut integrity contient le hash du fichier que tu as vérifié ; le navigateur calcule le hash de ce qu'il télécharge et, s'il ne correspond pas, refuse de l'exécuter. C'est de sévérité faible parce qu'il faut d'abord que le CDN soit attaqué, mais quand ça arrive, les dégâts sont totaux et silencieux.

Comment corriger

Option 1 : ajouter integrity aux balises

<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js"
  integrity="sha384-..." crossorigin="anonymous"></script>

Le hash s'obtient en téléchargeant le fichier exact et en lançant :

curl -s https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js | openssl dgst -sha384 -binary | openssl base64 -A

cdnjs et jsDelivr affichent le hash prêt à copier à côté de chaque fichier. L'attribut crossorigin="anonymous" est obligatoire pour que le navigateur puisse vérifier une ressource d'une autre origine. Et l'URL doit pointer vers une version figée (@4.4.0), jamais vers latest : si le CDN met à jour le fichier, le hash ne correspond plus et ton site cesse de charger cette bibliothèque, ce qui est exactement ce que tu veux face à un changement non vérifié.

Option 2 : servir les bibliothèques depuis ton domaine

Installe-les avec npm et laisse ton bundler (Vite, webpack, Nuxt, Next.js) les inclure dans ton build. Le fichier sort alors de ton serveur, avec un hash dans son nom, et le SRI n'est plus nécessaire. C'est l'option habituelle des projets modernes et celle qui règle le constat à la racine.

Ce qui n'accepte pas le SRI

Les feuilles de style de Google Fonts changent selon le navigateur qui les demande, donc leur hash n'est pas stable : soit tu acceptes ce constat, soit tu héberges les polices toi-même (ce qui améliore aussi la confidentialité et la vitesse). Les scripts d'analyse et de publicité qui se mettent à jour seuls (gtag.js, le pixel Meta) n'acceptent pas non plus un hash fixe ; là, la défense est la CSP, qui limite ce que chaque origine peut faire et que mesure CSP faible.

Vérifie que c'est corrigé

curl -s https://tondomaine.com | grep -oE '<(script|link)[^>]*(src|href)="(https?:)?//[^"]+"[^>]*>' | grep -v integrity

Chaque ligne qui sort est une ressource externe sans integrity. S'il ne reste que celles qui ne peuvent pas en avoir (polices, analyse), c'est terminé.

Questions fréquentes

Le SRI ralentit-il le chargement ?

Pas de manière perceptible : calculer un hash SHA-384 d'un fichier de quelques centaines de kilooctets prend des millisecondes. Ce qu'il fait, c'est t'obliger à figer les versions, ce qui est une bonne pratique de toute façon.

Si je mets à jour la bibliothèque, dois-je changer le hash ?

Oui, et c'est tout l'intérêt : la mise à jour passe par tes mains. Si tu utilises npm et ton bundler, le processus est le même que d'habitude et le build gère le hash.

Et les vieilles versions des bibliothèques du CDN ?

Le SRI garantit que le fichier est celui que tu as choisi, pas qu'il est sûr. Un jQuery 1.12 avec le bon hash a toujours ses failles ; c'est bibliothèques obsolètes qui le détecte.

Vérifie-le sur ton site

Analyse ton site gratuitement et vois si celle-ci et 44 autres vérifications passent, avec un fix prompt pour chaque problème.

Analyser mon site gratuitement

Vérifications liées