Chrome 应用中的内容安全策略

39

我的Chrome应用程序有以下清单:

{
    "name": ",
    "version": "1.0.3",
    "manifest_version": 2,
    "description": "Chrome Extension for.",
    "icons": {
        "16": "images/test.png",
        "19": "images/test.png",
        "256": "images/test.png"
    },
    "app": {
        "background": {
            "scripts": [
                "background.js"
            ]
        }
    },

    "sandbox": {
        "js": [
            "lib/test-api.js"
        ]
    },
    "permissions": [
        "<all_urls>",
        "notifications",
        "storage",
        "videoCapture"
    ]
}
我有一个运行了 eval 的脚本文件。我已经了解了关于CSP和沙盒的知识,但我仍然遇到了以下错误:

拒绝将一个字符串作为JavaScript代码进行评估,因为在以下内容安全策略指令中,'unsafe-eval'不是脚本允许的来源之一:"default-src 'self' chrome-extension-resource:"。请注意,由于'script-src'未明确设置,因此将使用'default-src'作为后备。

2个回答

46

您是否尝试将CSP行添加到您的清单中,就像您的CSP链接中所述?

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

3
是的,但我使用应用程序包。 - user1968030
抱歉,不确定我是否完全理解...从阅读关于打包应用程序的内容来看,似乎这并不重要。您的evalbackground.jstest-api.js还是两者都有? - brucek
4
我认为他所指的错误是"content_security_policy只允许在扩展和旧版打包应用中使用,但这是一个打包应用程序。"在应用程序中,您需要使用沙箱来使用eval。请参阅https://developer.chrome.com/apps/contentSecurityPolicy。 - mikemaccana
是的,谢谢,我最终弄明白了;-) @rob-w在下面给出了答案。 - brucek
可能有某些原因使得这成为一件“坏事”。 - Andy Hayden

36

您展示的内容不是Chrome扩展程序,而是Chrome应用程序
Chrome扩展程序将允许您放宽默认的内容安全策略;Chrome应用程序则不会。(来源:Chrome应用程序CSP文档;注意:此页面与Chrome扩展程序CSP文档不同)。

下一行适用于应用程序和扩展程序:

  • 内容安全策略不适用于特定脚本,而是适用于整个页面。因此,您只能为整个页面声明一个沙箱(使用清单文件中的sandbox.pages)。不能在沙箱中使用“js”作为键。

在Chrome扩展程序中,可以放宽CSP,例如通过以下策略允许eval

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

将您的应用程序转换为扩展程序:不要使用apps关键字,而要使用background关键字。使用以下清单,您将能够在后台页面中使用eval

{
    "name": "Whatever",
    "version": "1.0.3",
    "manifest_version": 2,
    "background": {
        "scripts": [
            "background.js"
        ]
    },
    "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"
}
< p >(由于它们对示例不相关,省略了icons / permissions;由于不需要,省略了sandbox

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接