最近、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を引き上げます。
サンドボックス化により、指定されたページをサンドボックス化された一意の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回限りの修正です。
http://wiki.greasespot.net/UnsafeWindow
http://wiki.greasespot.net/Content_Script_Injection
ただし、ハッキングには少なくとも最初のセキュリティホールを引き起こすことがわかっているため、欠点があります。
これらの設定は[コンテンツ]タブで編集できます。このタブにアクセスするには、アドレスバーにchrome://settings/content
と入力します。特定のコンテンツタイプの特定のドメインをホワイトリストに登録できます。