2

我正在尝试修改我的网络软件以使用内容安全策略。当我没有它编译时,一切运行良好。当我包含 CSP 标头时,Chrome 会在两个地方标记错误(使用 Chrome 开发人员工具):

  • 每个 ASPX 或 HTML 文件的第一行中出现“拒绝执行内联脚本,因为它违反了内容安全策略...”错误 - 即使没有内联 JavaScript!
  • “此上下文不允许从字符串生成代码”错误 - 这在 jquery-1.8.3.min.js 文件中有所说明,但似乎源自我编写的一些 JQuery,我在其中迭代来自 a 的数据用于在页面上生成项目的 Web 服务。

所以,有两个问题:为什么我总是被告知每个文件都是违规的,即使它只是一个纯静态 HTML 文件?

其次,内容安全真的意味着我在使用 JQuery 生成 html 时不能使用字符串——即使它位于专用的 .js 文件中?我查看了整个网络上的信息,但这个特定问题确实没有得到解决。那么......这里的规则是什么?

我真正想要的是防止 A) 内联 JavaScript 和 B) 加载外部 JS 文件。

任何帮助将不胜感激!

更新:当我将 JQuery/JQueryUI 升级到 1.8.2 / 1.9.1 时,字符串错误消失了。我之前使用的版本只有一个月大,所以这似乎是 JQuery 的最新改进。虽然我也一直在进行其他更改,但我不能确定这是 JQuery,但如果可以的话,使用更新的 JQuery 是有意义的。

4

1 回答 1

3

默认情况下,内容安全策略块evaleval类似结构(new Function、、setTimeout([STRING], ...)等);它们可能与内联脚本一样危险。如果您想允许eval,您需要将白名单'unsafe-eval'列为可接受的脚本来源。这可能看起来像:

Content-Security-Policy: script-src 'self' 'unsafe-eval' https://script.com

该规范的相关部分是http://www.w3.org/TR/CSP/#script-srchttp://www.html5rocks.com/en/tutorials/security/content-security-policy/#eval-too也可能有帮助。

关于错误消息,我建议使用 Canary。在过去一两个月中,我们显着改进了错误消息;希望您在不久的将来在 Stable 中有更好的调试体验。如果您在 Canary 中仍然遇到错误,无法为您提供足够的信息来调试问题,请提交错误 ( http://new.crbug.com/ ) 并在此处发布 ID。我会确保有人看着它。

我很高兴听到您正在试验 CSP!

于 2012-11-21T06:19:19.137 回答