內容安全政策

如果您不熟悉內容安全政策 (CSP),請參閱內容安全簡介 政策是很好的起點。這份文件涵蓋 CSP 的廣大網路平台觀點; Chrome 應用程式 CSP 仍有彈性。

CSP 是一項防範跨網站指令碼問題的政策,我們都知道跨網站 編寫指令碼是不良的。CSP 是一項溫和模糊的新政策,我們不會試圖說服您, 程序包含工作您需要瞭解如何以不同方式完成基本工作

本文件旨在詳細說明 Chrome 應用程式的 CSP 政策,以及 以及該如何以新方式完成這些基本工作 符合 CSP 規定。

什麼是 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 應用程式則沒有。

如何遵守 CSP

所有 JavaScript 和所有資源都必須是本機的 (所有資源都會封裝在您的 Chrome 應用程式中)。

「但該如何...」

您可能正在使用範本程式庫,且其中許多程式庫無法與 CSP 搭配運作。 此外,您可能也想存取應用程式中的外部資源 (外部圖片或網站內容)。

使用範本程式庫

使用提供預先編譯範本的程式庫,一切都準備就緒。您仍然可以使用 無法進行預先編譯,但您必須自行處理一些作業,而且設有一些限制。

您需要使用沙箱隔離任何您想要「評估」的內容 沙箱機制可移除指定內容上的 CSP。如果您想使用功能強大的 Chrome Chrome 應用程式中的 API,沙箱內容無法直接與這些 API 互動 (請參閱 沙箱本機內容)。

存取遠端資源

您可以透過 XMLHttpRequest 擷取遠端資源,並透過 blob:data:filesystem: 網址 (請參閱「參照外部資源」)。

影片和音訊可從遠端服務載入,因為兩者的備用行為良好, 例如離線或連線不穩

嵌入網頁內容

除了使用 iframe,您還可以使用 WebView 代碼呼叫外部網址 (請參閱嵌入 外部網頁)。