Aller au contenu
script-src.com
script-src.com
EN / FR
← Tous les guides

script-src nonces ou hachages : lequel utiliser

Par Thomas Poyeton

script-src nonce hash csp

Dès que vous ajoutez une directive script-src à votre Content-Security-Policy, les blocs <script> en ligne cessent de s'exécuter tant que vous ne les autorisez pas explicitement. Vous disposez de deux moyens pour le faire : un nonce ou un hachage. Ils résolvent le même problème par des approches opposées.

Nonces : un jeton aléatoire par réponse

Un nonce est une valeur aléatoire à usage unique que votre serveur génère pour chaque réponse HTTP et place à la fois dans l'en-tête et sur la balise script :

Content-Security-Policy: script-src 'nonce-r4nd0m'
<script nonce="r4nd0m">/* allowed */</script>

Le navigateur exécute le script en ligne uniquement si le nonce de la balise correspond à celui de l'en-tête. Comme la valeur est impossible à deviner et change à chaque réponse, un attaquant qui injecte un <script> ne peut pas connaître le nonce courant, et son script est donc bloqué.

Le point clé : vous devez générer un nouveau nonce à chaque réponse. Réutiliser un nonce entre plusieurs réponses, ou le coder en dur, réduit à néant tout le mécanisme.

Hachages : figer les octets exacts

Un hachage autorise un script en ligne par le hachage SHA de son contenu :

Content-Security-Policy: script-src 'sha256-BpfBOAGstzX3x9…'

Aucune logique serveur par requête n'est nécessaire, ce qui rend les hachages idéaux pour les sites statiques et les scripts en ligne qui ne changent jamais. Le compromis est leur fragilité : le hachage couvre les octets exacts situés entre les balises, si bien qu'un seul espace ajouté l'invalide.

Lequel choisir ?

  • Pages dynamiques rendues côté serveur → nonce. Vous effectuez déjà un rendu par requête, donc émettre une nouvelle valeur ne coûte presque rien.
  • Sites statiques / scripts en ligne inchangés → hachage. Aucune logique serveur requise.
  • Nombreux scripts tiers que vous ne contrôlez pas → envisagez 'strict-dynamic' en complément d'un nonce, afin que les scripts de confiance puissent charger leurs propres dépendances.

Vous pouvez calculer un hachage avec le générateur de hachage de script en ligne gratuit de ce site.

Vérifier l'ensemble de la politique

Les nonces et les hachages ne couvrent que les scripts en ligne. Le reste de votre script-src (et de chaque autre directive) doit tout de même être correct. Pour évaluer une Content-Security-Policy complète et détecter les contournements connus, analysez-la avec l'évaluateur CSP de CentralCSP.