8

CSP エラーが発生し続ける: 「次のコンテンツ セキュリティ ポリシー ディレクティブに違反しているため、インライン スクリプトの実行を拒否しました: "script-src 'self'"

この問題は、インライン JS を含む GWT によって生成された HTML ファイルが原因である可能性があります。

UPD : マニフェスト バージョン 1 への変更は役に立ちましたが、これは一時的な回避策です。Chrome 21 ではサポートされなくなると不平を言っているからです。

UPD2: <add-linker name="xsiframe" />どちらも役に立たない

4

4 に答える 4

9

GWT 2.5.1 では、この問題が最終的に修正されました。これを文書化したリリース ノートは次のとおりです。

https://developers.google.com/web-toolkit/release-notes#Release_Notes_2_5_1

そして彼らは次のように述べています:

「DirectInstallLinker で構築されたアプリは、インライン スクリプトが禁止されているページ (Chrome 拡張機能など) で動作する必要があります」

これは、インライン スクリプトに関するマニフェスト バージョン 2 の新しいセキュリティ要件を満たす方法で、DirectInstallLinker を使用して Chrome パッケージ アプリをリンクできるようになったことを意味します。つまり、DirectInstallLinker を使用して GWT バージョンとして選択された GWT 2.5.1 にアプリをリンクすると、GWT は生成された Javascript にスクリプト要素をインラインで配置しません。したがって、インライン スクリプトがないという新しいマニフェスト バージョン 2 の要件は、犯される。

SingleScriptLinker も自分のアプリで機能するようです。ただし、Issue 7685 では、SingleScriptLinker を使用しないように警告しています。これは、「パッケージ化されたアプリでは禁止されている $doc.write 行が生成される」ためです。私は DirectInstallLinker を自分で使用しています。

DirectInstallLinker の Javadoc は次のとおりです。

http://google-web-toolkit.googlecode.com/svn/javadoc/2.5/com/google/gwt/core/linker/DirectInstallLinker.html

このリンカーを使用するには、*.gwt.xml ファイルに以下を含めることができます。

<define-linker name="dil" class="com.google.gwt.core.linker.DirectInstallLinker"/>
<add-linker name="dil" />

(dil は、ダッシュやその他の不正な文字がない限り、任意のものに置き換えることができます)。

GWT のバージョンとして GWT 2.5.1 を選択する必要があります。Ganymede などの古いバージョンの Eclipse で古いバージョンの GWT を使用している場合 (私がそうであったように)、少なくとも Helios にアップグレードしてから、プロジェクトを新しい Eclipse 環境にインポートする必要があります。最新の 3 つの Eclipse バージョンで使用できる Eclipse 用 Google プラグインのアーカイブ URL は、次の場所にあります。

https://developers.google.com/eclipse/docs/download

上記の場所で、設定できるはずです

"manifest_version": 2

GWT が生成したインライン Javascript によるエラーは発生しません。これにより、他に問題がない限り、Chrome Web アプリは Chrome Web ストアで受け入れられるようになります (現在、新しいアプリやアプリを表示するための更新にはマニフェスト バージョン 2 が必要です)。

于 2013-05-14T22:05:13.110 に答える
5

編集:新しい GWT バグが報告されました: http://code.google.com/p/google-web-toolkit/issues/detail?id=7685 、http: //gwt-code-reviews.appspot.com/1838803も参照してください/このバグに関連するもの

言い換えれば、修正されたら、単にDirectInstallLinker( <add-linker name='direct_install'/>) を使用する必要があるように見えます。

それまでの間、IIUC さんは拡張する必要がDirectInstallLinkerあります。

  • オーバーライドして、部分なしでgetJsInstallLocationa のコピーを返しますinstallLocaltionIframe.js$wnd
  • によって生成されたもののgetModulePrefix先頭に追加するオーバーライドvar $wnd = $wnd || window.parent;super.getModulePrefix

私は CSP について完全な答えを出すほどには知りませんが、xsiframe リンカーは「カスタマイズ可能」です。com.google.gwt.core.linker.CrossSiteIframeLinker適切なメソッドを拡張およびオーバーライドするクラスを作成し<define-linker>、.<add-linker>*.gwt.xml

たとえば、getJsInstallLocationデフォルトはcom/google/gwt/core/ext/linker/impl/installLocationIframe.jsですが、com/google/gwt/core/ext/linker/impl/installLocationMainWindows.js別の実装があります。

同様に (そしておそらくもっと重要なことに)、getJsInstallScriptデフォルトはですが、別の実装com/google/gwt/core/ext/linker/impl/installScriptEarlyDownload.jsもあります。com/google/gwt/core/ext/linker/impl/installScriptDirect.js

http://code.google.com/p/google-web-toolkit/source/browse/trunk/dev/core/src/com/google/gwt/core/linker/CrossSiteIframeLinker.java#204 、http :/ /code.google.com/p/google-web-toolkit/source/browse/trunk/dev/core/src/com/google/gwt/core/ext/linker/impl/およびhttp://code.google. com/p/google-web-toolkit/source/browse/trunk/user/src/com/google/gwt/core/Core.gwt.xml

于 2012-08-27T22:09:48.337 に答える