5

Chrome 拡張機能の default_popup ページで Raphael を使用してパスを描画しようとすると、次のようになります。

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() を許可する危険なセキュリティ ポリシーを設定する以外に、パス文字列なしでパスを生成する別の方法はありますか?

4

3 に答える 3

17

拡張機能でeval()を使用するには、manifest.jsonに次の行を追加します(マニフェストv2を使用していると想定しています)

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

ご想像のとおり、ディレクティブ「unsafe-eval」でうまくいきます。

于 2013-02-18T10:43:15.597 に答える
3

Sergiiのソリューションは機能しています。ただし、拡張機能が XSS 攻撃に対して脆弱になるため、これを行うことはお勧めしません。

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

于 2013-06-21T07:55:42.870 に答える
0

この簡単な例を確認すると。

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

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

同様の行で、私はRachel pathのソースコードを調べてみましたが、私は良い方向に進んでいません.

Chrome 拡張機能では、Eval CSP を超える方法はありません。別の回避策を使用するか、純粋な SVG メソッドを使用することをお勧めします。

于 2013-02-14T07:09:30.873 に答える