web-dev-qa-db-ja.com

content-security-policyに違反しているため、画像の読み込みを拒否しました-Cordova

Code-push docに従ってアプリをデプロイしようとしています。その後、次のコンテンツセキュリティをアプリのindex.htmlに追加しました

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

すぐに追加しましたが、アプリが再び実行されません。 Cordovaブラウザーを実行するとき。コンソールで多くのエラーを見ました。 githubから参照されるスタイルファイル、mysite.com/...から参照される画像、およびその他の外部スクリプトであるgoopleapisが以下のセキュリティポリシーであることがわかります

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

現在は正常に動作します。私の質問は、セキュリティの影響とは何ですか?そのままにしておくべきですか?これをどうすればよいですか?任意の助けや意見をいただければ幸いです。 *を残すと、攻撃が停止することを許可する可能性があります。

11
Nuru Salihu

そうです、CSPをこのようにすると、攻撃者にとって物事が簡単になります。 CSPの使用の背後にある主なアイデアは、 here で説明されているURLホワイトリストです。

*ワイルドカードですべてをホワイトリストに登録することにより、攻撃者がアプリケーションにコードを挿入できるようになると、攻撃者がどこからでもコードをロード(および実行)できるようになります。これに関するリンクされた記事をチェックしてください、それは私がここで書いているものよりもはるかに良いです;)

これを行う正しい方法は何ですか?

  1. ホワイトリストに登録するドメインと、このドメインが提供する resources の種類を確認します。
  2. ワイルドカードとホワイトリストexactlyを取り除き、必要なリソースだけを探してください。たとえば、GitHubのスタイルシートを見てみましょう。次のようなスタイルの信頼できるドメインとしてGitHubを追加する必要があります:style-src 'self' https://github.com 'unsafe-inline';

注:default-srcポリシーは他のポリシーをオーバーライドするため、注意してください。画像をホワイトリストに登録する場合は、data:キーワードを次のように追加する必要があります:img-src 'self' http://somedomain.com data:;

Mozillaのドキュメント は、すべてのポリシーとキーワードの概要を探している場合、非常に優れています...

9
Phonolog

で解決:

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