web-dev-qa-db-ja.com

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

こんにちは私が5.0.0以上のAndroidシステムを持つデバイスに私のアプリをデプロイしようとしたとき、私はこの種のエラーメッセージを受け取り続けました:

07-03 18:39:21.621:D/SystemWebChromeClient(9132):ファイル:///Android_asset/www/index.html:行0:スクリプトの読み込みを拒否しました ' http:// xxxxx 'これは、次のコンテンツセキュリティポリシーの指令に違反しているからです。 "script-src' self '' unsafe-eval '' unsafe-inline '" 07-03 18:39:21.621:I/chromium(9132):[情報:CONSOLE(0)] "スクリプト ' http:// xxx 'の読み込みを拒否しました。次の内容に違反していますセキュリティポリシー指令: "script-src 'self' 'unsafe-eval' '' unsafe-inline '"。

ただし、4.4.xのAndroidシステムを搭載したモバイルデバイスにデプロイした場合、セキュリティポリシーはデフォルトのもので機能します。

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

基本的に、両方のオプションは私のためには機能しません。誰もがこの問題を解決する方法についての考えを持っていますか?

ありがとうございます。

55
MangooSaSa

で解決した

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

あなたのメタタグを以下のように置き換えてみてください。

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

あるいは、あなたが持っているものに加えて、上記のように 'self'の後に追加されたhttp://*style-srcの両方にscript-srcを追加するべきです。

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

43
Ashikodi

MagngooSasaによる自動回答がうまくいきましたが、回答を理解しようとしている他の人のために、もう少し詳しく説明します。

Visual StudioでCordova Appsを開発する際に、リモートのJavaScriptファイル[ここにあります http://Guess.What.com/MyScript.js] をインポートしようとしましたが、タイトルにエラーがあります。

これは、プロジェクトのindex.htmlファイルにあるBEFORE前のメタタグです。

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

これは、リモートスクリプトをインポートできるようにするための、CORRECTEDメタタグです。

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

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

33
Simon

これを使った:

<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'">
4
simprão

この追加についてもう少し詳しく説明する

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

エラーを修正

3
James Nicholson

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

msgstr "" https://mybank.com のコードは https://mybank.com のデータにのみアクセスでき、 https:// evil) ".example.com 確実にアクセスを許可されるべきではありません。各Originは他のWebサイトから隔離されています。"

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

このポリシーは、一連のポリシー指令を使用して記述されます。各ポリシー指令は、特定のリソースタイプまたはポリシー領域のポリシーを記述します。ポリシーに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';** ">

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

私は最初の2つがあなたのユースケースに本当に有効であると思います、私は他のものについて少し確信がありません。 'unsafe-line''unsafe-eval'はセキュリティ上の問題を引き起こすので、特に必要がない限り、これらを使用しないでください。

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

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

私たちの場合は、Tomcat9 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を再起動しただけでは、応答にヘッダーが追加されないはずです。

セキュリティまたは本番環境に関心がある場合は、これに従わないでください。これらの手順は、テスト目的のためだけに使用してください。

0
prem