web-dev-qa-db-ja.com

Chromeのコンテンツセキュリティポリシーを緩和するにはどうすればよいですか?

最近、Facebookなどの一部のWebサイトは コンテンツセキュリティポリシー (CSP)を使用して、「信頼できないソース」からのスクリプトのロードを制限しています。たとえば、Facebook HTMLコンテンツをリクエストする場合(例:https://www.facebook.com)、FacebookのHTTP応答には次の応答ヘッダーが含まれます。

x-webkit-csp:default-src *;script-src https://*.facebook.com http://*.facebook.com https://*.fbcdn.net http://*.fbcdn.net *.facebook.net *.google-analytics.com *.virtualearth.net *.google.com 127.0.0.1:* *.spotilocal.com:* chrome-extension://lifbcibllhkdhoafpjfnlhfpfgnpldfl 'unsafe-inline' 'unsafe-eval' https://*.akamaihd.net http://*.akamaihd.net;style-src * 'unsafe-inline';connect-src https://*.facebook.com http://*.facebook.com https://*.fbcdn.net http://*.fbcdn.net *.facebook.net *.spotilocal.com:* https://*.akamaihd.net ws://*.facebook.com:* http://*.akamaihd.net;

これは、信頼できないソースからJavascriptライブラリをロードして実行する必要がある一部のブックマークレットに影響を与えます。

たとえば、Facebookページで Show Anchorsブックマークレット を実行しようとすると、信頼されていないものからjQueryをロードしようとするため、このブックマークレットの実行が失敗します。ソース。 Chromeのデベロッパーコンソールでは、次のように表示されます。

Refused to load the script 'http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js' because it violates the following Content Security Policy directive: "script-src https://*.facebook.com http://*.facebook.com https://*.fbcdn.net http://*.fbcdn.net *.facebook.net *.google-analytics.com *.virtualearth.net *.google.com 127.0.0.1:* *.spotilocal.com:* chrome-extension://lifbcibllhkdhoafpjfnlhfpfgnpldfl 'unsafe-inline' 'unsafe-eval' https://*.akamaihd.net http://*.akamaihd.net".

Chromeこのトピックに関するドキュメントページを見つけましたが、Chrome拡張機能にのみ適用されます

私ができるソリューションを探しています

  • いずれかでCSPを非アクティブ化
  • または、信頼できるソースを恒久的にホワイトリストに登録します。
18
Abdull

Chrome Appsによって承認されたメソッド

テンプレートライブラリを使用する

コンパイル済みのテンプレートを提供するライブラリを使用すれば、準備は完了です。まだプリコンパイルを提供していないライブラリを使用することもできますが、それはあなたの側でいくつかの作業を必要とし、制限があります。

サンドボックスを使用して、「評価」したいコンテンツを分離する必要があります。サンドボックスは、指定したコンテンツのCSPを引き上げます。

サンドボックスローカルコンテンツ

サンドボックス化により、指定されたページをサンドボックス化された一意のOriginで提供できます。これらのページは、コンテンツセキュリティポリシーから除外されます。サンドボックス化されたページは、iframe、インラインスクリプト、およびeval()を使用できます(最後の2つは禁止されているものです)。 「unsafe-inline」と「unsafe-eval」が修正されます。

  • サンドボックスでインラインスクリプトを使用する
  • マニフェストにサンドボックスを含める

リモートリソースにアクセスする

XMLHttpRequestを介してリモートリソースをフェッチし、blob:、data :、またはfilesystem:URLを介してそれらを提供できます。これにより、jQueryフェッチの問題が修正されます。

マニフェストの要件

クロスオリジンXMLHttpRequestsを実行できるようにするには、リモートURLのホストに対する権限を追加する必要があります。

クロスオリジンXMLHttpRequest

リモートURLをアプリにフェッチし、そのコンテンツをblob: URLとして提供します。


あなたはこれらのどれもすることができないと思います。 unsafe-evalおよびunsafe-inline応答ヘッダーを修正するには、スクリプトの所有者のみがコードを修正できます。コードがパブリックドメインにある場合は修正できます。これはおそらく1回限りの修正です。


ハック

UnsafeWindow

http://wiki.greasespot.net/UnsafeWindow

コンテンツスクリプトインジェクション

http://wiki.greasespot.net/Content_Script_Injection


ただし、ハッキングには少なくとも最初のセキュリティホールを引き起こすことがわかっているため、欠点があります。

2

これらの設定は[コンテンツ]タブで編集できます。このタブにアクセスするには、アドレスバーにchrome://settings/contentと入力します。特定のコンテンツタイプの特定のドメインをホワイトリストに登録できます。

0
Gman Smith