nonce
Fournit un jeton cryptographique à usage unique pour autoriser l'exécution d'un script ou d'une feuille de style inline dans le contexte d'une Content Security Policy (CSP).
Description
L’attribut nonce (number used once) associe un jeton cryptographique généré côté serveur à un élément <script> ou <style> inline. La Content Security Policy (CSP) peut alors autoriser uniquement les scripts/styles portant ce nonce exact, bloquant les injections malveillantes qui ne connaissent pas le nonce.
Syntaxe
<!-- Côté serveur : générer un nonce aléatoire pour chaque requête -->
<script nonce="abc123xyz">
// Ce script est autorisé par la CSP
console.log('Script sécurisé');
</script>
<style nonce="abc123xyz">
body { background: white; }
</style>
Exemples
En-tête HTTP CSP correspondant :
Content-Security-Policy: script-src 'nonce-abc123xyz'; style-src 'nonce-abc123xyz'
Génération côté serveur (Node.js) :
import { randomBytes } from 'crypto';
const nonce = randomBytes(16).toString('base64');
// Dans le HTML :
// <script nonce="${nonce}">…</script>
// En-tête : Content-Security-Policy: script-src 'nonce-${nonce}'
Notes
Nouveau nonce à chaque requête : le nonce doit être unique et imprévisible à chaque réponse HTTP. Un nonce statique ou réutilisé est vulnérable aux attaques par rejeu.
Lecture CSS masquée : les navigateurs masquent la valeur du nonce via CSS (la propriété content ne peut pas lire attr(nonce)), pour éviter les fuites via les sélecteurs CSS.
Alternative aux hash : la CSP accepte aussi des hash SHA-256/384/512 des scripts inline comme alternative aux nonces — utile quand les scripts sont statiques et ne changent pas.
Support navigateurs
Chrome61+ · Firefox75+ · Safari15.5+ · Edge79+