Das Laden des Skripts wurde abgelehnt, da es gegen die folgende Richtlinie zur Inhaltssicherheitsrichtlinie verstößt

95

Als ich versuchte, meine App auf Geräten mit einem Android-System über 5.0.0 ( Lollipop ) bereitzustellen , wurden immer wieder folgende Fehlermeldungen angezeigt:

07-03 18: 39: 21.621: D / SystemWebChromeClient (9132): Datei: ///android_asset/www/index.html: Zeile 0: Das Laden des Skripts 'http: // xxxxx' wurde abgelehnt, da es den folgenden Inhalt verletzt Sicherheitsrichtlinie: "script-src 'self' 'unsafe-eval' 'unsafe-inline'". 07-03 18: 39: 21.621: I / chrom (9132): [INFO: CONSOLE (0)] "Das Laden des Skripts 'http: // xxx' wurde abgelehnt, da es gegen die folgende Richtlinie zur Inhaltssicherheitsrichtlinie verstößt:" script- src 'self' 'unsicher-eval' 'unsicher-inline' ".

Wenn ich es jedoch auf einem mobilen Gerät mit dem Android-System 4.4.x ( KitKat ) bereitgestellt habe, funktioniert die Sicherheitsrichtlinie mit den Standardrichtlinien:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">

Dann dachte ich mir, ich sollte vielleicht zu so etwas wechseln:

<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-eval' 'unsafe-inline'; object-src 'self'; style-src 'self' 'unsafe-inline'; media-src *">

Grundsätzlich funktionieren beide Optionen bei mir nicht. Wie kann ich dieses Problem lösen?

MangooSaSa
quelle
Sehr ähnlich zu meinem Problem. Ich kann eine JSON-Datei nicht abrufen, da sie gegen die folgende Richtlinie zur Inhaltssicherheitsrichtlinie verstößt: "connect-src 'self'"
Michael R
1
@MichaelR Wenn Sie einige JSON-Informationen von der API über JS abrufen möchten, z. B. das Tampermonkey-Addon oder alles andere, können Sie dieses Plugin chrome.google.com/webstore/detail/disable-content-security/… verwenden und die CSP-Prüfung deaktivieren, während Sie sie erhalten möchten etwas. Es ist zwar nicht sicher, aber in einigen Fällen könnte es funktionieren. Ich poste diese Antwort hier, weil ich nach meinem Fehler gesucht habe und dieses Thema zuerst in Google angezeigt wird.
Eryk Wróbel

Antworten:

64

Versuchen Sie, Ihr Meta-Tag durch das folgende zu ersetzen:

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' http://* 'unsafe-inline'; script-src 'self' http://* 'unsafe-inline' 'unsafe-eval'" />

Oder zusätzlich zu dem, was Sie haben, sollten Sie http://*zu beiden hinzufügen style-srcund script-srcwie oben gezeigt nach 'Selbst' hinzufügen.

Wenn Ihr Server den Content-Security-PolicyHeader enthält, überschreibt der Header das Meta.

Ashikodi
quelle
6
Soweit ich weiß, deaktiviert der hier definierte CSP alle Arten von Sicherheit, um Angriffe zu vermeiden, Skript-Tags zuzulassen und Skripte aus einer beliebigen Domäne sowie über unsichere Verbindungen zu laden. siehe developer.google.com/web/fundamentals/security/csp Oder bekomme ich s.th. falsch? Ich würde vermuten, dass dies in den meisten Fällen (außer beim Entwickeln und Debuggen) nicht das ist , was Sie wollen ... richtig?
Peter T.
1
Siehe auch infosec.mozilla.org/guidelines/…
Peter T.
8
Ich würde diese Antwort ablehnen, weil Sie vorschlagen, "unsafe-inline" "unsafe-eval" zu verwenden, was Sie bei der Verwendung von CSP nicht tun sollten!
HerTesla
39

Die von MagngooSasa gegebene Selbstantwort hat es geschafft, aber für alle anderen, die versuchen, die Antwort zu verstehen, gibt es hier ein paar weitere Details:

Bei der Entwicklung von Cordova- Apps mit Visual Studio habe ich versucht, eine Remote-JavaScript-Datei [hier http://Guess.What.com/MyScript.js] zu importieren, aber der im Titel erwähnte Fehler ist aufgetreten.

Hier ist das Meta- Tag zuvor in der Datei index.html des Projekts:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">

Hier ist das korrigierte Meta-Tag, um das Importieren eines Remote-Skripts zu ermöglichen:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *;**script-src 'self' http://onlineerp.solution.quebec 'unsafe-inline' 'unsafe-eval';** ">

Und kein Fehler mehr!

Simon
quelle
14

Es wurde gelöst mit:

script-src 'self' http://xxxx 'unsafe-inline' 'unsafe-eval';
MangooSaSa
quelle
45
Könnten Sie es bitte etwas näher erläutern? Können Sie das vollständige Meta einfügen?
Tony
3
@dyoser Hier ist die Referenz developer.chrome.com/extensions/contentSecurityPolicy#relaxing
igaurav
1
Dadurch wird CSP für Skripte effektiv deaktiviert, indem böswilligen Plugins / xss das Injizieren von Inline- und Evaluierungsskripten ermöglicht wird, was den gesamten Zweck der Aktivierung von CSP zunichte macht.
IncredibleHat
7

Wir haben das benutzt:

<meta http-equiv="Content-Security-Policy" content="default-src gap://ready file://* *; style-src 'self' http://* https://* 'unsafe-inline'; script-src 'self' http://* https://* 'unsafe-inline' 'unsafe-eval'">
simprão
quelle
7

Für alle, die eine vollständige Erklärung suchen, empfehle ich Ihnen, sich die Inhaltssicherheitsrichtlinie anzusehen: https://www.html5rocks.com/en/tutorials/security/content-security-policy/ .

„Code aus https://mybank.com sollte nur Zugriff auf https://mybank.com ‚s Daten und https://evil.example.com sollte auf jeden Fall nie Zugriff erlaubt werden. Jede Herkunft aus dem isoliert gehalten wird Rest des Webs "

XSS-Angriffe basieren auf der Unfähigkeit des Browsers, den Code Ihrer App von Code zu unterscheiden, der von einer anderen Website heruntergeladen wurde. Daher müssen Sie mithilfe des Content-Security-PolicyHTTP-Headers die Inhaltsursprünge auflisten , von denen Sie annehmen, dass sie sicher heruntergeladen werden können .

Diese Richtlinie wird mithilfe einer Reihe von Richtlinienanweisungen beschrieben, von denen jede die Richtlinie für einen bestimmten Ressourcentyp oder Richtlinienbereich beschreibt. Ihre Richtlinie sollte eine default-src-Richtlinienanweisung enthalten. Dies ist ein Fallback für andere Ressourcentypen, wenn sie keine eigenen Richtlinien haben.

Wenn Sie also Ihr Tag ändern in:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *;**script-src 'self' http://onlineerp.solution.quebec 'unsafe-inline' 'unsafe-eval';** ">

Sie sagen , dass Sie die Ausführung von Code Javacsript autorisieren ( script-src) von den Ursprüngen 'self', http://onlineerp.solution.quebec, 'unsafe-inline', 'unsafe-eval'.

Ich denke, dass die ersten beiden für Ihren Anwendungsfall zutreffend sind, bei den anderen bin ich mir etwas unsicher. 'unsafe-line'und 'unsafe-eval'stellen ein Sicherheitsproblem dar, daher sollten Sie sie nicht verwenden, es sei denn, Sie haben einen ganz bestimmten Bedarf an ihnen:

"Wenn eval und seine Text-zu-JavaScript-Brüder für Ihre Anwendung unbedingt erforderlich sind, können Sie sie aktivieren, indem Sie 'unsafe-eval' als zulässige Quelle in eine script-src-Direktive einfügen. Aber bitte auch nicht. Verbot Die Fähigkeit, Zeichenfolgen auszuführen, erschwert es einem Angreifer erheblich, nicht autorisierten Code auf Ihrer Site auszuführen. " (Mike West, Google)

Rocío García Luque
quelle
Warum kann ich auf meiner localhost-Seite ein anderes Host-Skript anhängen?
mqliutie
Es ist nicht ungewöhnlich, Skripte von Drittanbietern wiederzuverwenden, die nicht auf Ihrem Server gehostet werden, denen Sie jedoch "vertrauen"
Rocío García Luque
5

Vollständige Berechtigungszeichenfolge

Die vorherigen Antworten haben mein Problem nicht behoben, da sie nicht gleichzeitig blob: data: gap:Schlüsselwörter enthalten. Also hier ist eine Zeichenfolge, die Folgendes tut:

<meta http-equiv="Content-Security-Policy" content="default-src * self blob: data: gap:; style-src * self 'unsafe-inline' blob: data: gap:; script-src * 'self' 'unsafe-eval' 'unsafe-inline' blob: data: gap:; object-src * 'self' blob: data: gap:; img-src * self 'unsafe-inline' blob: data: gap:; connect-src self * 'unsafe-inline' blob: data: gap:; frame-src * self blob: data: gap:;">

Warnung: Dadurch wird das Dokument vielen Exploits ausgesetzt. Vergewissern Sie sich, dass Benutzer keinen Code in der Konsole ausführen oder sich in einer geschlossenen Umgebung wie einer Cordova- Anwendung befinden.

Alexandre Daubricourt
quelle
1
Dies ist die richtige Antwort, wenn Sie versuchen, z. B. JQuery wie folgt
Will Sheppard
4

Um dies näher zu erläutern, fügen Sie hinzu

script-src 'self' http://somedomain 'unsafe-inline' 'unsafe-eval';

zum Meta-Tag wie so,

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; script-src 'self' https://somedomain.com/ 'unsafe-inline' 'unsafe-eval';  media-src *">

behebt den Fehler.

James Nicholson
quelle
1

Das Hinzufügen des Meta-Tags zum Ignorieren dieser Richtlinie hat uns nicht geholfen, da unser Webserver den Content-Security-PolicyHeader in die Antwort eingefügt hat.

In unserem Fall verwenden wir Ngnix als Webserver für eine Tomcat 9 Java-basierte Anwendung. Vom Webserver aus wird der Browser angewiesen inline scripts, dies nicht zuzulassen. Daher haben wir für einen vorübergehenden Test das Content-Security-PolicyKommentieren deaktiviert.

So schalten Sie es in ngnix aus

  • Standardmäßig wird in der Datei ngnix ssl.conf der Antwort ein Header hinzugefügt:

    #> grep 'Content-Security' -ir /etc/nginx/global/ssl.conf add_header Content-Security-Policy "default-src 'none'; frame-ancestors 'none'; script-src 'self'; img-src 'self'; style-src 'self'; base-uri 'self'; form-action 'self';";

  • Wenn Sie diese Zeile nur kommentieren und ngnix neu starten, sollte der Header nicht zur Antwort hinzugefügt werden.

Wenn Sie Sicherheitsbedenken haben oder in der Produktion sind, befolgen Sie diese bitte nicht. Verwenden Sie diese Schritte nur zu Testzwecken und zum Fortfahren.

prem
quelle
0

Der wahrscheinliche Grund, warum Sie diesen Fehler erhalten, ist wahrscheinlich, dass Sie den Ordner / build zu Ihrer .gitignore-Datei hinzugefügt oder ihn im Allgemeinen nicht in Git eingecheckt haben.

Wenn Sie also den Heroku- Master auf Git drücken , wird der Build-Ordner, auf den Sie verweisen, nicht auf Heroku übertragen. Und deshalb zeigt es diesen Fehler.

Dies ist der Grund, warum es lokal ordnungsgemäß funktioniert, jedoch nicht, wenn Sie es in Heroku bereitgestellt haben.

Sachin
quelle
Ich habe das gleiche Problem. Schlagen Sie also vor, Ordner aus dem .gitignore zu entfernen / zu erstellen?
Hoang Minh