SRI : Subresource Integrity

Article publié, le et modifié le
2 minute(s) de lecture

Cet article contient 258 mots.
Source brute de l'article : MD

Définition

SRI est une norme du W3C 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 JS 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 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

Fichier :

1
2
3
4
5
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
(…)

<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous">
</script>

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