L'intégrité des sous-ressources me permet essentiellement de savoir qu'une ressource que je vais télécharger est valide, car le hachage de son contenu correspond à ce que j'attends.
Mais cela suppose que j'exécute déjà un code de confiance et vérifié. Si un pirate a compromis le serveur servant les ressources, il pourrait facilement remplacer la ressource racine par des hachages de son propre code malveillant (ou tout simplement contourner les vérifications d'intégrité).
Alors, comment les contrôles d'intégrité des sous-ressources peuvent-ils aider? Et comment un client procéderait-il pour vérifier la ressource racine?
L'intégrité des sous-ressources ne consiste pas à protéger votre propre code de l'application Web contre toute modification. Ce que l'ISR est censé faire peut être vu dans la description des objectifs :
La compromission d'un service tiers ne doit pas automatiquement signifier la compromission de chaque site qui inclut ses scripts.
Ainsi, il s'agit de protéger votre utilisation des ressources situées sur des sites qui ne sont pas sous votre contrôle. SRI redonne un certain contrôle même si le code d'un site tiers est inclus. Il n'offre pas de disponibilité mais il offre une intégrité, c'est-à-dire une protection contre les modifications indésirables par le tiers (ou un pirate informatique qui a repris cette partie).
Disons que vous avez un site construit autour de jQuery. Vous ne téléchargez pas jQuery et utilisez votre copie, mais vous utilisez une version à partir d'un CDN, en utilisant la mise en cache sur les navigateurs du client. Cela fonctionne car si un site utilise la version CDN, il sera mis en cache et chaque site qui utilise la même version en bénéficiera, sans avoir à télécharger un fichier identique à chaque fois.
Un jour, quelqu'un pirate les serveurs CDN et remplace les fichiers JavaScript par des versions modifiées qui soumettent chaque frappe aux serveurs de l'attaquant quelque part. Et chaque site qui utilise ce script est affecté, votre site inclus.
Ici entre Intégrité de la sous-ressource - SRI . Il empêche un tiers de modifier les ressources externes sans être détecté. Si le SRI est activé sur vos ressources externes, un navigateur client ne chargera pas les ressources avec des incohérences de hachage.
alors ils pourraient facilement remplacer la ressource racine par des hachages de leur propre code malveillant
Pas vraiment. SRI protège votre site (code que vous contrôlez) contre les modifications d'un script tiers que vous ne contrôlez pas. Une attaque contre votre code n'est pas protégée par SRI, car si un attaquant modifie un script tiers et votre site, il peut faire la même chose en modifiant uniquement votre site avec beaucoup moins de problèmes. Après tout, attaquer votre site est plus facile que d'attaquer Akamai, CloudFlare, Google ou Microsoft.