web-dev-qa-db-ja.com

「unsafe-eval」は許可されていないため、文字列をJavaScriptとして評価することを拒否しました

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)

Manifest.jsonにこれがあります:

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

そのエラーを回避するために使用できる他の設定はありますか?

8
Alexander Mills

A chrome拡張機能ではunsafe-eval、またはeval実際には。

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

Chrome拡張機能を作成する場合、コンテンツセキュリティポリシーによって厳しく制限されていることを理解してください。WebExtensionsコンテンツセキュリティポリシーを読んで理解してください。

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

スクリプトタグの内容を計算してSHA256値にし、それをマニフェストに追加して、実行を許可する必要があります。

5
Simon Hyll

数時間かかりましたが、おそらくあなたがしたいことは、Webpackが使用するソースマッピングのスタイルを変更することです。デフォルトでは、evalを使用します。

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

これをwebpack.config.jsに追加しました:devtool: 'cheap-module-source-map'

これの秘Theは、なぜwebpack --mode developmentにはエラーがあり、webpack --mode productionしませんでした。

また、私はReact not Polymerを使用していますが、これはまだ当てはまります。

36
Randy

マニフェスト経由で克服するための興味深い読み取り

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

評価されたJavaScript

ポリシーに「unsafe-eval」を追加することにより、eval()およびsetTimeout(String)、setInterval(String)、new Function(String)などの関連クラスに対するポリシーを緩和できます。

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

ただし、これを行わないことを強くお勧めします。これらの機能は悪名高いXSS攻撃ベクトルです。

5
takrishna