Aller au contenu
script-src.com
script-src.com
EN / FR

Hachages

Comment les hachages script-src de la CSP autorisent les scripts en ligne selon leur contenu exact, et comment le condensé est calculé.

Un hachage autorise un script en ligne d'après le condensé cryptographique de son contenu. Utilisez un hachage lorsque le script en ligne est statique et identique à chaque chargement, afin de ne nécessiter aucune logique serveur par requête.

Fonctionnement

Calculez le condensé SHA du texte exact situé entre les balises <script>, encodez le résultat en base64, puis préfixez-le avec l'algorithme :

Content-Security-Policy: script-src 'sha256-cLuU6nVzrYJlxWFupKQaFxCRfDCWTUYVFNBBHtBGKPQ='
<script>console.log('static inline script');</script>

Le navigateur hache le script en ligne qu'il trouve et ne l'exécute que si le résultat figure dans la liste de sources. sha256, sha384 et sha512 sont tous acceptés.

Le hachage couvre les octets exacts

Le condensé est calculé sur le contenu textuel brut de l'élément, sans aucune normalisation. Tout changement l'invalide, notamment :

  • Un espace ou un saut de ligne en début ou en fin.
  • Un changement de style de guillemets ou de nom de variable.
  • Une réindentation par votre formateur de code.

Pour cette raison, générez le hachage à partir des octets exacts que vous livrez, après toute étape de build susceptible de reformater le script. Vous pouvez en calculer un avec le générateur de hachage de script en ligne.

Les attributs ne font pas partie du hachage

Le hachage ne couvre que le texte situé entre les balises, pas les attributs de la balise. Un gestionnaire d'événement en ligne comme onclick="doThing()" n'est pas couvert par un hachage de script classique. Autoriser ces gestionnaires requiert 'unsafe-hashes', un mécanisme distinct et plus faible.

Nonce ou hachage ?

  • Hachage : scripts en ligne statiques, sortie de site statique, aucun rendu côté serveur.
  • Nonce : pages dynamiques capables d'émettre une nouvelle valeur par réponse.

Les hachages évitent le travail par requête mais cessent de fonctionner dès que le script change. Les nonces tolèrent un contenu de script changeant mais exigent une génération côté serveur à chaque réponse. Consultez les nonces pour cette approche.

Plusieurs scripts en ligne

Chaque script en ligne distinct nécessite son propre hachage. Listez-les ensemble :

script-src 'sha256-hashOfScriptA' 'sha256-hashOfScriptB'