內容安全政策

如果您不熟悉內容安全政策 (CSP),不妨參考內容安全政策簡介。本文件介紹了更廣泛的 CSP 網路平台觀點;Chrome 應用程式 CSP 沒有彈性。

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 應用程式中使用功能強大的 Chrome API,則沙箱內容無法直接與這些 API 互動 (請參閱沙箱本機內容)。

存取遠端資源

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

影片和音訊可以從遠端服務載入,因為它們在離線或不穩定的連線時具有良好的備用行為。

嵌入網路內容

除了使用 iframe,您也可以使用 WebView 標記呼叫外部網址 (請參閱「嵌入外部網頁」)。