コンテンツ セキュリティ ポリシー(CSP)についてあまりご存じない場合は、コンテンツ セキュリティの概要 ポリシーから始めることをおすすめします。このドキュメントには、CSP のウェブ プラットフォームに関する幅広い見解が記載されています。 Chrome アプリ CSP の柔軟性はそれほど高くありません。
CSP はクロスサイト スクリプティングの問題を軽減するためのポリシーであり、 避けるべきですGoogle は、CSP が温かく曖昧な新しいポリシーであると納得させようとしません。 それには作業が伴います。基本的なタスクを異なる方法で行う方法を学ぶ必要があります。
このドキュメントの目的は、Chrome アプリの CSP ポリシーとは何か、 基本的なタスクを、コンプライアンスに配慮した方法で 引き続き行えるか CSP に準拠。
Chrome アプリの CSP とは
Chrome アプリのコンテンツ セキュリティ ポリシーでは、次の行為が制限されています。
- Chrome アプリ ページではインライン スクリプトを使用できません。この制限により、両方の
<script>
ブロックが禁止されます。 イベント ハンドラ(<button onclick="...">
)があります。 - アプリファイルで外部リソースを参照することはできません(動画と音声を除く) あります。iframe に外部リソースを埋め込むことはできません。
eval()
やnew Function()
などの文字列から JavaScript のメソッドは使用できません。
これは、次のポリシー値で実装されます。
default-src 'self';
connect-src * data: blob: filesystem:;
style-src 'self' data: 'unsafe-inline';
img-src 'self' data:;
frame-src 'self' data:;
font-src 'self' data:;
media-src * data: blob: filesystem:;
Chrome アプリは、メディアを除くアプリ内のスクリプトとオブジェクトのみを参照できます。 ファイル(アプリはパッケージ外で動画や音声を参照できます)。Chrome 拡張機能を使用すると、 デフォルトのコンテンツ セキュリティ ポリシーChrome アプリは共有できません。
CSP の遵守方法
すべての JavaScript とすべてのリソースがローカルにある必要があります(すべてが Chrome アプリにパッケージ化されます)。
「では、どうすれば...」
テンプレート ライブラリを使用している可能性は高く、その多くは CSP では機能しません。 アプリの外部リソース(外部画像、ウェブサイトのコンテンツ)にアクセスすることもおすすめします。
テンプレート ライブラリを使用する
プリコンパイル済みのテンプレートを提供するライブラリを使用すれば、準備は完了です。利用可能なライブラリは、 ではプリコンパイルは行いませんが、ユーザー側での作業が必要で、制限があります。
サンドボックスを使用して、「評価」するすべてのコンテンツを分離する必要があります。できます。 サンドボックス化により、指定したコンテンツの CSP が引き上げられます。非常にパワフルな Chrome を サンドボックス化されたコンテンツでこれらの API を直接操作することはできません(詳しくは、 サンドボックスのローカル コンテンツをご覧ください)。
リモート リソースにアクセスする
XMLHttpRequest
でリモート リソースを取得し、blob:
、data:
、または
filesystem:
URL(外部リソースの参照をご覧ください)。
動画と音声はリモート サービスから読み込めます。これらは、リモート サービスからの 接続が不安定な環境下でも対応できます
ウェブ コンテンツの埋め込み
iframe を使用する代わりに、WebView タグを使用して外部 URL を呼び出すことができます(埋め込み 外部のウェブページ)。