Die von Webpack kompilierte Chrome-Erweiterung löst den Fehler „unsafe-eval“ aus

Lesezeit: 4 Minuten

Benutzeravatar von Alexander Mills
Alexander Mills

Ich erhalte diesen Fehler, wenn ich meine Chrome-Erweiterung nach dem Kompilieren mit Webpack neu lade:

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)

Mein CSP gewährt die unsafe-eval Erlaubnis.

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

Wie kann ich die Verwendung von zulassen? eval() in meinem Code (weil Webpack dies verwendet, um Quellkarten zu generieren)?

  • Eine Möglichkeit, dieses Problem zu vermeiden, ist die Verwendung ng build --prodaber der Prod-Build dauert laaaange länger

    – Alexander Mills

    1. Januar 2018 um 4:34 Uhr

  • Hinzufügen devtool: 'cheap-module-source-map' zu Ihrer Webpack-Konfiguration behebt das Problem, indem die standardmäßige Quellzuordnung überschrieben wird.

    – Ben Botwinick

    16. Juli 2020 um 23:52 Uhr

Ich habe ein paar Stunden gebraucht, aber was Sie wahrscheinlich tun möchten, ist, den Stil der Source-Mapping-Webpack-Verwendung zu ändern. Standardmäßig wird eval verwendet.

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

Ich habe dies zu meiner webpack.config.js hinzugefügt:

devtool: 'cheap-module-source-map'

Der Trick dabei war, herauszufinden, warum webpack --mode development hat den Fehler u webpack --mode production nicht.

Ich verwende auch React, nicht Polymer, aber ich bin mir ziemlich sicher, dass dies immer noch gilt.

  • Ich bekam diesen Fehler, wenn ich mich änderte mode zu developmentes gab keinen Fehler bei der Verwendung productionalso fügte ich hinzu devtool: 'cheap-module-source-map' und ich bekomme den Fehler nicht mehr. muss diese Linie entfernt werden, wenn Sie verwenden production Modus? oder ist es in Ordnung, es dort zu lassen, wenn es drin ist production Modus? Ich verstehe nicht wirklich, was es tut, ich möchte nur, dass der Fehler verschwindet 🙂

    – Benutzer1063287

    29. August 2020 um 6:34 Uhr

  • Überraschenderweise hat das funktioniert, danke! Jetzt werde ich herausfinden, warum. Danke noch einmal.

    – Nestor

    28. September 2020 um 14:08 Uhr

  • Wenn Sie hinzufügen devtool: 'cheap-module-source-map' zu webpack.config.js Um dieses Problem zu umgehen, müssen Sie Löschen diese Einstellung beim Einfahren production wieder in den Modus oder wird nur beim Einfahren angewendet development Modus?

    – Benutzer1063287

    3. November 2021 um 3:35 Uhr

  • Mit deiner Hilfe habe ich eine Minute gebraucht. Danke!

    – Tal

    9. Mai 2022 um 9:51 Uhr

  • Wenn Sie auf nicht definierte Bibliotheken stoßen, denken Sie daran, die es-Version auf die neueste Version einzustellen, damit der Bibliothekscode nicht ausgefüllt wird. "@babel/preset-env", { "modules": false, "targets": "last 2 Chrome versions" }

    – weiya ou

    12. Mai 2022 um 14:41 Uhr


Interessante Lektüre, die über Manifest zu überwinden ist

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

Evaluiertes JavaScript

Die Richtlinie gegen eval() und ihre Verwandten wie setTimeout(String), setInterval(String) und new Function(String) kann gelockert werden, indem Sie ‘unsafe-eval’ zu Ihrer Richtlinie hinzufügen:

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

Wir raten jedoch dringend davon ab. Diese Funktionen sind berüchtigte XSS-Angriffsvektoren.

  • Hinzufügen meines Anwendungsfalls zum Stoßen in den Suchergebnissen: Ich habe versucht, den “webpack-extension-reloader” zu verwenden, um meine webpack-erstellte Erweiterung beim Webpack-Kompilieren automatisch neu zu laden, und habe immer wieder den Fehler von OP im chrome://extensions-Fehlerprotokoll für meine erhalten entpackte Erweiterung. Letztendlich brach dies die Fähigkeit des Wiederladers, seine Arbeit zu erledigen. Das Hinzufügen der Lösung dieser Antwort zu meiner manifest.json löste das Problem jedoch.

    – t-mart

    2. Mai 2020 um 5:03 Uhr

  • ‘content_security_policy.extension_pages’: Unsicherer CSP-Wert “‘unsafe-eval'” in Direktive ‘script-src’. Manifest konnte nicht geladen werden.

    – Peter Palmer

    28. Januar 2022 um 16:47 Uhr

  • Achtung: Unsichere Auswertungen funktionieren nur auf Chrome-Manifest v3

    – TechWeisheit

    11. März 2022 um 3:03 Uhr

Danke für die Antwort von @Randy. Für das von der Vue-CLI generierte Vue-Projekt gibt es jedoch keine webpack.config.jsalso fügt die Lösung die folgende Konfiguration hinzu vue.config.js:

  configureWebpack: {
    devtool: 'cheap-module-source-map'
  }

  • Danke an dich und @Randy! Wirklich hilfreich!

    – Marchev

    1. April 2021 um 20:13 Uhr

  • Hat das Problem nicht gelöst.

    – Rohit Nair

    3. Oktober 2022 um 5:36 Uhr

Eine Chrome-Erweiterung darf nicht verwendet werden unsafe-evaloder eval eigentlich überhaupt.

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

Wenn Sie eine Chrome-Erweiterung erstellen, machen Sie sich bewusst, dass sie durch Inhaltssicherheitsrichtlinien stark eingeschränkt ist. Stellen Sie sicher, dass Sie die Inhaltssicherheitsrichtlinie von WebExtensions gelesen und verstanden haben. Wenn Sie ein Inline-Skript haben möchten wie:

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

Sie müssen den Inhalt des Skript-Tags in seinen SHA256-Wert umrechnen und diesen zu Ihrem Manifest hinzufügen, damit es ausgeführt werden kann.

Webpaket V5

Verwenden --no-devtool um schnell aus der Patsche zu kommen.

Kein Evaluierungscode, nein .map Datei.

npx webpack watch --no-devtool

webpack CLI
https://webpack.js.org/api/cli#negated-flags

Allens Benutzeravatar
Allen

FYI, ich treffe dieses Problem, weil ich hinzufüge istanbul Plugin in babel.config.js.

Und das Build-Ergebnis enthält new Function('return this')

Benutzeravatar von Goutham JM
Goutham JM

Für Manifest 3 können Sie verwenden

"content_security_policy": {
    "extension_page":"script-src 'self' 'wasm-unsafe-eval'; object-src 'self'" 
}

1438500cookie-checkDie von Webpack kompilierte Chrome-Erweiterung löst den Fehler „unsafe-eval“ aus

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy