在内容安全策略中将多个域列入白名单

2024-03-17

我正在编写一个 chrome 扩展,它的白名单中需要有两个域以用于内容安全策略。我已经查看了官方文档,但似乎仍然无法弄清楚正确的语法。

以下似乎不起作用:

"content_security_policy": "script-src 'self' https://foo.com https://example.com; object-src 'self'"

EDIT:

我的内容脚本和弹出窗口都能够访问 foo.com,但是都无法访问 example.com。

Chrome 扩展是否能够在 CSP 中将多个源列入白名单?


根据我对 CSP 的了解,这看起来在语法上是正确的。这HTML5 Rocks 有关 CSP 的文章 http://www.html5rocks.com/en/tutorials/security/content-security-policy/同意你的语法,说:

script-src https://host1.com https://host2.com将正确指定两个来源都是有效的。

但是,您的问题可能是:

  1. 这个CSP禁止所有子域 https://developer.mozilla.org/en-US/docs/Security/CSP/Using_Content_Security_Policy#Example_3, 包括www.foo.com and www.example.com。您可以显式添加这些子域主机名,也可以使用https://*.foo.com允许所有子域。

  2. 如果您的任何脚本请求重定向到未经允许的域,则该请求将失败。例如,如果https://example.com/foo.js响应一个301 or 302重定向到https://notpermitted.com/foo.js(不允许的来源)或https://www.example.com/foo.js(不允许的子域),请求将失败根据规格 https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html#script-src:

    每当用户代理获取 URI (包括跟随重定向时)...如果 URI 与允许的脚本源不匹配,则用户代理必须表现得好像收到了空的 HTTP 400 响应...

EDIT:

只是为了确认一下,是的,Chrome 扩展程序可以将多个 HTTPS 来源列入白名单。您可以构建一个简单的扩展来测试这一点:

清单.json

{
    "name":"CSP Test",
    "version":"1.0",
    "manifest_version":2,
    "browser_action":{
        "default_popup":"csp_test.html"
    },
    "content_security_policy": "script-src 'self' https://www.iana.org https://ajax.googleapis.com; object-src 'self'"
}

csp_test.html

<script src="https://www.iana.org/_js/2013.1/jquery.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>
<script src="csp_test.js"></script>

csp_test.js

alert(jQuery)
alert(jQuery.ui)

此扩展从远程域加载 jQuery 和 jQuery UI。如果您从 CSP 中删除任一来源,您将看到一个“undefined“警报表示其中一个库加载失败。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在内容安全策略中将多个域列入白名单 的相关文章

随机推荐