次のコンテンツセキュリティポリシーディレクティブに違反しているため、スクリプトの読み込みを拒否しました


99

5.0.0以上のAndroidシステム(Lollipop)を搭載したデバイスにアプリをデプロイしようとすると、次のようなエラーメッセージが表示され続けます。

07-03 18:39:21.621:D / SystemWebChromeClient(9132):file:///android_asset/www/index.html:Line 0:Refused to load the script 'http:// xxxxx' for violate the following Contentセキュリティポリシーディレクティブ:「script-src 'self' 'unsafe-eval' 'unsafe-inline'」。07-03 18:39:21.621:I / chromium(9132):[INFO:CONSOLE(0)] "次のコンテンツセキュリティポリシーディレクティブに違反しているため、スクリプト 'http:// xxx'のロードが拒否されました:" script- src 'self' 'unsafe-eval' 'unsafe-inline' "。

ただし、Androidシステムが4.4.x(KitKat)のモバイルデバイスに展開した場合、セキュリティポリシーはデフォルトのポリシーで機能します。

<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 *">

それから、多分、私はこのようなものに変えるべきだと思いました:

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

基本的に、どちらのオプションも私にはうまくいきません。この問題を解決するにはどうすればよいですか?


私の問題と非常に似ています。「次のコンテンツセキュリティポリシーディレクティブに違反しているため、JSONファイルを取得できません:「connect-src 'self'」」
Michael R

1
@MichaelR tampermonkeyアドオンなど、JSを介してAPIから一部のJSON情報を取得する場合、このプラグインchrome.google.com/webstore/detail/disable-content-security/…を使用して、取得したいときにCSPチェックを無効にすることができます。何か。安全ではありませんが、場合によっては機能することもあります。私は自分のエラーを探していて、このトピックが最初にGoogleで表示されるため、ここにこの回答を投稿しています。
ErykWróbel、2018

回答:


65

メタタグを次のように置き換えてみてください。

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

それともあなたは持っているものに加えて、あなたが追加する必要がありhttp://*、両方にstyle-srcし、script-src上で見た「自己」の後に追加として。

サーバーにContent-Security-Policyヘッダーが含まれている場合、ヘッダーはメタをオーバーライドします。


6
ここで定義するCSPを理解すると、攻撃を回避するためにすべての種類のセキュリティが無効になり、スクリプトタグが許可され、任意のドメインからのスクリプトのロードが可能になり、安全でない接続を介して接続することもできます。developers.google.com/web/fundamentals/security/cspを参照してください。または、s.thを取得しますか。違う?ほとんどの場合(開発とデバッグを除いて)これはあなたが望むものではないと思います...そうですか?
Peter T.


9
CSPを使用する場合は、「unsafe-inline」「unsafe-eval」を使用することをお勧めします。
HerTesla

39

MagngooSasaによって与えられた自己の答えはトリックをしましたが、答えを理解しようとしている誰のために、ここではいくつかのビットの詳細は以下のとおりです。

Visual StudioでCordovaアプリを開発しているときに、リモートのJavaScriptファイル(http://Guess.What.com/MyScript.jsにあります)をインポートしようとしましたが、タイトルにエラーが表示されていました。

ここでメタタグの前にプロジェクトのindex.htmlのファイルには、:

<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 *">

リモートスクリプトのインポートを可能にするために修正されたメタタグを次に示します。

<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';** ">

そして、これ以上のエラーはありません!


14

それはで解決されました:

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

46
もう少し説明してもらえますか?メタ全体を貼り付けることはできますか?
Tony


1
これにより、悪意のあるプラグイン/ xssがインラインスクリプトと評価スクリプトを挿入できるようになるため、スクリプトのCSPが事実上無効になり、CSPを有効にするという目的全体が無効になります。
IncredibleHat

7

これを使用しました:

<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'">

7

詳細な説明をお探しの方は、コンテンツセキュリティポリシー(https://www.html5rocks.com/en/tutorials/security/content-security-policy/)をご覧になることをお勧めします。

「コードhttps://mybank.comはのみにアクセスできる必要があります https://mybank.comのデータを、そしてhttps://evil.example.com確かにアクセスを許可してはいけません。それぞれの原点はから隔離され続けますウェブの残りの部分」

XSS攻撃は、ブラウザーがアプリのコードを別のWebサイトからダウンロードされたコードと区別できないことに基づいています。そのため、Content-Security-PolicyHTTPヘッダーを使用して、安全にコンテンツをダウンロードできると考えるコンテンツオリジンをホワイトリストに登録する必要があります。

このポリシーは、一連のポリシーディレクティブを使用して記述されます。各ディレクティブは、特定のリソースタイプまたはポリシーエリアのポリシーを記述します。ポリシーにはdefault-srcポリシーディレクティブを含める必要があります。これは、独自のポリシーを持たない他のリソースタイプのフォールバックです。

したがって、タグを次のように変更すると、

<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';** ">

あなたは(Javacsriptコードの実行を許可していることを言っているscript-srcの起源から)'self'http://onlineerp.solution.quebec'unsafe-inline''unsafe-eval'

最初の2つはあなたのユースケースに対して完全に有効だと思いますが、他の使用例については少しわかりません。'unsafe-line'そして'unsafe-eval'、あなたが彼らのために非常に具体的な必要性を持っていない限り、あなたがそれらを使用すべきではないので、セキュリティ上の問題を提起します:

「evalとそのテキストからJavaScriptへの移行がアプリケーションに完全に不可欠である場合、script-srcディレクティブの許可されたソースとして「unsafe-eval」を追加することで、それらを有効にできます。ただし、ここでも禁止してください。禁止文字列を実行する機能により、攻撃者がサイトで不正なコードを実行することがさらに困難になります。」(Google、Mike West)


localhostページに別のホストスクリプトを追加できるのはなぜですか?
mqliutie

あなたのサーバーではなく、あなたの「信頼」がホストされていないサードパーティのスクリプト再利用することは珍しいことではありません
ロシオ・ガルシア・ルケ

6

完全な権限文字列

以前の回答ではblob: data: gap:、同時にキーワードが含まれていないため、私の問題は解決しませんでした。だからここに行う文字列です:

<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:;">

警告:これにより、ドキュメントが多くのエクスプロイトにさらされます。ユーザーがコンソールでコードを実行したり、Cordovaアプリケーションのような閉じた環境に置かれたりしないようにしてください。


1
たとえば、次のようにコンソールにJQueryをロードしようとしている場合、これは正しい答えです。stackoverflow.com/ a
Will Sheppard

4

これについてさらに詳しく説明するには、

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

そのようなメタタグに、

<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 *">

エラーを修正します。


2

このポリシーを無視するメタタグを追加しても、WebサーバーがContent-Security-Policy応答にヘッダーを挿入していたため、役に立ちませんでした。

今回のケースでは、Tomcat 9 JavaベースのアプリケーションのWebサーバーとしてNgnixを使用しています。Webサーバーからは、ブラウザーにを許可しないように指示してinline scriptsいるため、一時的なテストのためにContent-Security-Policyコメントを付けてオフにしました。

Ngnixでそれをオフにする方法

  • デフォルトでは、ngnix ssl.confファイルはこれに応答にヘッダーを追加します:

    #> 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';";

  • この行をコメント化してngnixを再起動するだけであれば、ヘッダーが応答に追加されないはずです。

セキュリティまたは本番環境で懸念がある場合は、これに従わずに、これらの手順をテスト目的でのみ使用し、次に進んでください。


-1

このエラーが発生する理由として考えられるのは、/ gitフォルダーを.gitignoreファイルに追加したか、一般にGitにチェックインしていないためです。

したがって、GitでHerokuマスターをプッシュしても、参照しているビルドフォルダーはHerokuにプッシュされません。そしてそれがこのエラーを表示する理由です。

それがローカルで適切に機能する理由ですが、Herokuにデプロイしたときはそうではありません。


同じ問題があります。.gitignoreから/ buildフォルダーを削除することを提案していますか?
ホアンミン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.