【问题标题】:Content Security Policy in Chrome AppChrome 应用中的内容安全政策
【发布时间】:2014-02-03 12:10:48
【问题描述】:

我的 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' 是 用作后备。

【问题讨论】:

    标签: javascript google-chrome manifest google-chrome-app content-security-policy


    【解决方案1】:

    您是否尝试按照CSP 链接将 CSP 行添加到清单中?

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

    【讨论】:

    • 是的,但我使用的是应用程序包应用程序
    • 抱歉,我不确定我是否完全理解......从阅读packaged apps 看来,这似乎无关紧要。您的 eval 是在 background.js、test-api.js 还是两者中?
    • @brucek 我认为他所指的错误是 'content_security_policy' is only allowed for extensions and legacy packaged apps, but this is a packaged app.' 在应用程序中,您需要使用沙盒来使用 eval。见developer.chrome.com/apps/contentSecurityPolicy
    • 是的,谢谢,我最终想通了 ;-) @rob-w 的答案如下
    • 这可能是“坏事”的原因。
    【解决方案2】:

    您显示的内容不是Chrome extension,而是Chrome app
    Chrome 扩展程序可以让您放松默认的内容安全策略; Chrome 应用不会。(来源:CSP docs for Chrome apps;注意:此页面与 CSP docs for Chrome extensions 不同)。

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

    • 内容安全策略不适用于特定脚本,而是整个页面。因此,您只能为整个页面声明一个沙箱(使用sandbox.pages key in the manifest file)。您不能在沙盒中使用“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'"
    }
    

    (省略icons/permissions,因为它们与示例无关;省略sandbox,因为不需要)

    【讨论】:

      猜你喜欢
      • 2015-01-26
      • 2015-07-13
      • 2019-04-15
      • 2015-07-22
      • 2016-10-03
      • 2017-04-24
      • 2021-07-30
      • 2019-07-24
      • 2020-12-29
      相关资源
      最近更新 更多