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

unsafe-inline, unsafe-eval et compagnie

Ce que les mots-clés unsafe-inline, unsafe-eval, unsafe-hashes et wasm-unsafe-eval autorisent dans script-src, et quand chacun est justifié.

Les mots-clés unsafe- assouplissent chacun script-src d'une manière spécifique. Ils existent pour la compatibilité avec du code que vous ne pouvez pas modifier immédiatement. Traitez chacun d'eux comme une tolérance temporaire à supprimer, non comme un choix par défaut.

'unsafe-inline'

Autorise tous les scripts en ligne, les attributs de gestionnaire d'événement en ligne et les URL javascript: :

script-src 'unsafe-inline'

Cela désactive de fait la protection contre les XSS qu'offre script-src, car un script en ligne injecté devient indiscernable d'un script légitime. Préférez plutôt un nonce ou un hachage. Comme indiqué sur ces pages, un nonce ou un hachage dans la même directive amène les navigateurs à ignorer 'unsafe-inline', de sorte que vous pouvez le lister uniquement comme valeur de repli pour les anciens navigateurs.

'unsafe-eval'

Autorise les API de conversion de chaîne en code :

script-src 'unsafe-eval'

Cela couvre eval(), new Function(), ainsi que setTimeout / setInterval appelés avec un argument de type chaîne. Certains moteurs de templates et bibliothèques anciens en ont besoin. Les équivalents modernes n'en ont généralement pas besoin. Supprimer 'unsafe-eval' se résume souvent à mettre à jour une dépendance ou à passer une fonction plutôt qu'une chaîne à setTimeout.

'wasm-unsafe-eval'

Autorise la compilation et l'instanciation de WebAssembly sans autoriser l'eval JavaScript :

script-src 'wasm-unsafe-eval'

Avant l'existence de ce mot-clé, exécuter WebAssembly exigeait le bien plus large 'unsafe-eval'. Si vous n'avez besoin que de Wasm, utilisez 'wasm-unsafe-eval' afin que l'eval JavaScript reste bloqué.

'unsafe-hashes'

Autorise des gestionnaires d'événement en ligne précis dont le code correspond à un hachage listé :

script-src 'unsafe-hashes' 'sha256-hashOfHandlerCode'

Un hachage de script classique ne couvre pas les gestionnaires d'attribut comme onclick="doThing()", car le hachage est calculé sur le contenu d'un élément script, pas sur les attributs. 'unsafe-hashes' étend le hachage à ces gestionnaires. Il est plus faible que de déplacer le gestionnaire dans un bloc <script> haché ou muni d'un nonce, alors ne l'utilisez que lorsque vous ne pouvez pas modifier le balisage.

Les supprimer

Un ordre pratique pour resserrer une politique :

  1. Remplacez 'unsafe-inline' par des nonces ou des hachages.
  2. Échangez 'unsafe-eval' contre 'wasm-unsafe-eval' si seul Wasm en a besoin, puis supprimez-le entièrement une fois que les dépendances le permettent.
  3. Déplacez les gestionnaires onclick en ligne dans des scripts et abandonnez 'unsafe-hashes'.

Surveillez vos rapports de violation pendant cette opération, afin de détecter tout ce qui casse avant vos utilisateurs.