--- title: "SRI : Subresource Integrity" date: 2017-08-16T13:36:25+01:00 description: "Explication sur l'entête HTTP nommée SRI : Subresource Integrity" draft: false lastmod: 2018-10-12T02:47:25+01:00 tags: ["HTTP", "header", "SRI"] --- ## Définition **SRI** est une norme du {{< abbr W3C "World Wide Web Consortium" >}} pour protéger des attaques par modification des ressources proposées par votre site internet, ou de celles que vous ajoutez, fournies par d'autres. Dans l'immédiat, elle ne s'utilise que pour les scripts {{< abbr JS "JavaScript" >}} et les feuilles de styles. Si la somme de contrôle relative à la ressource attendue ne correspond pas à celle déclarée, alors la ressource n'est pas (télé)chargée par le client web. Le bénéfice de cette technique est réelle, mais elle peut être un peut complexe à mettre en place. Il est possible de l'utiliser conjointement avec la directive `require-sri-for` de l'entête {{% inside "web:http:csp" CSP %}}. ## Options * `integrity` : la somme de contrôle, encodée en base64, précédée de la fonction de hash utilisée. Seuls les algorithmes `sha256`, `sha384` - recommandation minimale - , et `sha512` sont supportés. Il est possible de spécifier plusieurs niveaux de hash, dans ce cas, ce sera le hash le plus fort qui sera consulté en priorité ; s'il n'est pas supporté, ce sera celui qui le précéde. * `crossorigin` : informe le client web que la ressource partagée l'est de manière anonyme, sans aucun cookie. Une seule option : `anonymous`. ## Exemples {{< file "web-http-sri-example" html >}} Bien-sûr, il est possible de faire de même - c'est fortement encouragé - avec vos propres ressources… ## Code Ci-dessous, retrouvez le code de génération shell : `cat "${file}" | openssl dgst -"${algo}" -binary | openssl enc -base64 -A` ## Documentations * Générateur de hash pour SRI : https://www.srihash.org/ * Support actuel : http://caniuse.com/#search=sri ------------------------------------------------------------------------