2013-02-13 3 views
5

私はChromeの拡張機能のためのdefault_popupページでパスを描画するためにラファエルを使用しよう:セキュリティポリシーのために、Chrome拡張機能ポップアップにパスを描画するためにRaphael JSを使用することはできませんか?

r.path("M0,0L10,10"); 

私は次のエラーを取得する:

Uncaught EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'self' chrome-extension-resource:". 

私は(evalのを禁止する必要性を理解して)そのようなことがありますが、なぜこれがJavaScriptを文字列として評価するのでしょうか? eval()を可能にする安全でないセキュリティポリシーを設定する以外に、パス文字列を使わずにパスを生成する方法がありますか?

答えて

0

この簡単な例を確認してください。

function (params, callback) { 
    setTimeout(function() { 
     callback(true) 
    }, 1000); // CSP 
}; 

上記のコードは、setTimeout()代わりにコールバック自体のcallback(true)結果を受け取り、私はsetTimeout()定義にコールバック関数を実行していますので、CSPに違反し。その場合、評価が必要となり、Chromeのセキュリティポリシーがトリガされます。

同様の行で、私はRaphel pathのソースコードを見てみましたが、良い方向ではありません。この種のコードが関係していたはずです。

クロム拡張では、Eval CSPを超える方法がありません。別の回避策を使用するか、純粋なSVGメソッドを使用することをお勧めします。あなたのmanifest.jsonを以下の行を追加するには、拡張機能にはeval()を使用するためには

+0

これは、以前の場合行われていないかもしれないが、それはもはや適用されます。上記のスニペットは、 'unsafe-eval'がヘッダーから削除された状態で正常に機能します。 – Kafoso

17

"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'" 

あなたはディレクティブを推測するかもしれませんが「unsafe-(私はあなたがマニフェストV2を使用していることを前提とし) eval 'はトリックです。

+0

トリックをありがとう、それは私のために働いた。しかし、これのために人々が怖がっていると思いますか?私はAngularJSを使用していますが、これはこのエラーです...これのために他のテクノロジーをコーディングする必要はありません。 – Shadowbob

3

Sergiiの解決策が働いています。ただし、拡張機能がXSS攻撃に対して脆弱になるため、これを行うことはお勧めしません。

あなたは代わりにサンドボックスを使用する必要があります。 http://developer.chrome.com/apps/sandboxingEval.html

関連する問題