Content Security Policy(内容安全政策)

警告

重要提示:Chrome 将在所有平台上取消对 Chrome 应用程序的支持。 Chrome 浏览器和 Chrome 网上应用店将继续支持扩展。阅读公告并了解有关迁移应用程序的更多信息。

如果您不熟悉内容安全策略 (CSP),内容安全策略简介是一个很好的起点。该文件涵盖了 CSP 更广泛的网络平台视图; Chrome 应用 CSP 没有那么灵活。

CSP 是一种缓解跨站点脚本问题的策略,我们都知道跨站点脚本是不好的。我们不会试图让您相信 CSP 是一项温暖而模糊的新政策。有工作要做;你需要学习如何以不同的方式完成基本任务。

本文档的目的是准确告诉您 Chrome 应用程序的 CSP 政策是什么,您需要做什么来遵守它,以及您仍然可以如何以符合 CSP 的方式完成这些基本任务。

# What is the CSP for Chrome Apps?(什么是 Chrome 应用程序的 CSP?)

Chrome 应用程序的内容安全政策限制您执行以下操作:

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

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

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 应用程序不会。

# How to comply with CSP(如何遵守 CSP)

所有 JavaScript 和所有资源都应该是本地的(所有内容都打包在您的 Chrome 应用程序中)。

# But then how do I..."(可是那我怎么办……)

您很可能正在使用模板库,而其中许多库不适用于 CSP。您可能还想访问应用程序中的外部资源(外部图像、网站内容)。

# Use templating libraries(使用模板库)

使用提供预编译模板的库即可。您仍然可以使用不提供预编译的库,但它需要您做一些工作并且有一些限制。

您将需要使用沙箱来隔离您想要对其进行“评估”的任何内容。沙盒会根据您指定的内容提升 CSP。如果您想在 Chrome 应用程序中使用非常强大的 Chrome API,您的沙盒内容无法直接与这些 API 交互(请参阅沙盒本地内容Sandbox local content)。

# Access remote resources(访问远程资源)

您可以通过 XMLHttpRequest 获取远程资源,并通过 blob:data:filesystem: URL 为它们提供服务(请参阅引用外部资源)。

可以从远程服务加载视频和音频,因为它们在离线或连接不稳定时具有良好的回退行为。

# Embed web content(嵌入网页内容)

您可以使用 webview 标记调用外部 URL,而不是使用 iframe(请参阅嵌入外部网页)。

By.一粒技术服务

results matching ""

    No results matching ""