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.一粒技术服务