web-dev-qa-db-fra.com

Refusé d'évaluer une chaîne comme JavaScript car «unsafe-eval» n'est pas autorisé

J'obtiens cette erreur lors du rechargement de mon Chrome Extension:

Uncaught EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'self' blob: filesystem: chrome-extension-resource:".


    at new Function (<anonymous>)
    at evalExpression (compiler.js:33919)
    at jitStatements (compiler.js:33937)
    at JitCompiler.webpackJsonp.../../../compiler/esm5/compiler.js.JitCompiler._interpretOrJit (compiler.js:34520)
    at JitCompiler.webpackJsonp.../../../compiler/esm5/compiler.js.JitCompiler._compileTemplate (compiler.js:34448)
    at compiler.js:34347
    at Set.forEach (<anonymous>)
    at JitCompiler.webpackJsonp.../../../compiler/esm5/compiler.js.JitCompiler._compileComponents (compiler.js:34347)
    at compiler.js:34217
    at Object.then (compiler.js:474)

J'ai ceci dans mon manifest.json:

 "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"

existe-t-il un autre paramètre que je peux utiliser pour éviter cette erreur?

8
Alexander Mills

A chrome n'est pas autorisée à utiliser unsafe-eval, ou eval du tout en fait.

https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Content_Security_Policy

Lorsque vous créez une extension Chrome extension, comprenez qu'elle est sévèrement limitée par les politiques de sécurité du contenu. Assurez-vous de lire et de comprendre la politique de sécurité du contenu WebExtensions. Si vous voulez avoir un script en ligne comme:

<script>
    alert('hello')
</script>

Vous devrez calculer le contenu des balises de script dans sa valeur SHA256 et l'ajouter à votre manifeste pour qu'il puisse être exécuté.

5
Simon Hyll

Cela m'a pris quelques heures, mais ce que vous voulez probablement faire, c'est changer le style d'utilisation du webpack de cartographie source. Par défaut, il utilise eval.

https://webpack.js.org/configuration/devtool/

J'ai ajouté ceci à mon webpack.config.js: devtool: 'cheap-module-source-map'

L'astuce était de comprendre pourquoi webpack --mode development a l'erreur et webpack --mode production non.

J'utilise également React not Polymer mais je suis sûr que cela s'applique toujours).

36
Randy

Lecture intéressante à surmonter via Manifest

https://developer.chrome.com/extensions/contentSecurityPolicy

JavaScript évalué

La politique contre eval () et ses parents comme setTimeout (String), setInterval (String) et la nouvelle fonction (String) peut être assouplie en ajoutant 'unsafe-eval' à votre politique:

"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'" 

Cependant, nous vous déconseillons fortement de le faire. Ces fonctions sont des vecteurs d'attaque XSS notoires.

5
takrishna