内容安全政策

如果您不熟悉内容安全政策 (CSP),请查看内容安全简介 Policy 是一个很好的切入点。该文档介绍了内容安全政策的更广泛的网络平台视图; Chrome 应用 CSP 不那么灵活。

CSP 是一项可缓解跨站脚本问题的策略,我们都知道跨站 编写糟糕的脚本。我们不会试图说服您,内容安全政策是一项十分温和而模糊的新政策。 这涉及到一些工作;您需要了解如何以不同方式执行基本任务。

本文旨在向您具体介绍适用于 Chrome 应用的 CSP 政策,以及 您需要采取哪些措施来满足该法规的要求,以及您如何仍能以切实有效的方式完成这些基本任务 符合 CSP 标准。

什么是适用于 Chrome 应用的 CSP?

Chrome 应用的内容安全政策禁止您执行以下操作:

  • 您无法在 Chrome 应用页面中使用内嵌脚本。此限制同时禁止了两个 <script> 块 和事件处理脚本 (<button onclick="...">)。
  • 您不能在任何应用文件中引用任何外部资源(视频和音频除外) 资源)。您不能在 iframe 中嵌入外部资源。
  • 您不能使用 eval()new Function() 等字符串到 JavaScript 方法。

这是通过以下政策值实现的:

default-src 'self';
connect-src * data: blob: filesystem:;
style-src 'self' data: 'unsafe-inline';
img-src 'self' data:;
frame-src 'self' data:;
font-src 'self' data:;
media-src * data: blob: filesystem:;

Chrome 应用只能引用您应用中的脚本和对象,但媒体除外 文件(应用可以引用软件包之外的视频和音频)。Chrome 扩展程序可助您放松身心 默认的内容安全政策;Chrome 应用则不能。

如何遵守 CSP

所有 JavaScript 和所有资源都应是本地资源(所有内容均打包到您的 Chrome 应用中)。

“但我该如何...”

您很可能使用的是模板库,而且其中许多库都与 CSP 不兼容。 您可能还想访问应用中的外部资源(外部图片、来自网站的内容)。

使用模板库

使用提供预编译模板的库,一切就绪。你仍然可以使用 不提供预编译,但需要您进行一些工作,并且存在一些限制。

您需要使用沙盒隔离要执行“评估”的任何内容 沙盒可针对您指定的内容提升 CSP。如果您想使用功能非常强大的 Chrome API 集成,则您的沙盒内容无法直接与这些 API 交互(请参阅 沙盒本地内容)。

访问远程资源

您可以通过 XMLHttpRequest 提取远程资源,并通过 blob:data:filesystem: 网址(请参阅引用外部资源)。

视频和音频可以从远程服务加载,因为当 或连接状况不佳。

嵌入网页内容

除了使用 iframe,您还可以使用 WebView 代码调用外部网址(请参阅嵌入 外部网页)。