3

Chrome 拡張アプリケーションで JavaScript を使用して「iframe」にさまざまなコンテンツ (pdf、swf など) を読み込もうとしています。コンテンツは、データ URL スキームを次のように使用してロードされます。

// この JavaScript は html ファイルに登録され、LoadFunction はボタンのクリックで DOMContentLoaded イベント内に登録されます。

void LoadFunction()
{
window.parent.document.getElementById("page_data").src = 'data:application/pdf;base64,'    + 'base64 encoded data'; (base64 data is received from a c++ class)
}

ただし、上記の関数が呼び出されるとすぐに、コンテンツ セキュリティ ポリシー エラーが次のように発生します。

'data:application/pdf;base64,JVBERi0xLjQNCiXi48/TDQoxIDAgb2JqDQo8PA0KL1R5cGU…mRvYmoNCjkgMCBvYmoNCjw8DQovVHlwZSAvRm9udA0KL1N1YnR5cGUgL1R5cGUxDQovQmFz PolicyZUZ' からのプラグイン データの読み込みを拒否しました。

しかし驚くべきことに、データの URL が 'data:image/png;base64,' + 'base64 encoded data'; に変更された場合、このエラーは発生しません。画像が iframe に正常に読み込まれます。

私の知る限り、このエラーはインライン コードが html ファイルに直接実行された場合にのみ発生しますが、ここではそうではありません。

また、manifest.json ファイルでコンテンツ セキュリティ ポリシーを「content_security_policy」:「script-src 'self'; object-src 'self' ; frame-src 'self' data:」に設定しようとすると、

その後、エラーは次のように変わり ます: 'data:application/pdf;base64' からのプラグイン データの読み込みを拒否しました。これは、次のコンテンツ セキュリティ ポリシー ディレクティブに違反しているためです:

おそらく object-src を設定する必要がありますが、どうすればよいかわかりません。

4

1 に答える 1

0

Chrome 拡張機能のContent Security Policyのドキュメントによると、

script-src と object-src の両方がポリシーによって定義されていることに注意してください。Chrome は、これらの各値を (少なくとも) 'self' に制限しないポリシーを受け入れません。

PDF を受け入れるように拡張機能の CSP を緩和することはできません。
しかし...

サンドボックス化された拡張リソース、つまり、拡張の CSP の影響を受けない拡張内のページを定義できます。同時に、ページのセキュリティの脆弱性から保護するために、ページは Chrome 拡張 API へのアクセスを失います。拡張機能とサンドボックス化されたページの間で通信したい場合は、たとえばChrome 拡張機能での eval の使用postMessageに示されているように - を使用します。安全に。.

于 2013-12-08T19:17:14.143 に答える