設定CSP

內容安全性原則 (CSP)是用來限制瀏覽器可以使用的資源。 CSP也可限制指令碼和樣式資源的功能。 Adobe Experience Platform Web SDK不需要CSP,但新增一個CSP可減少攻擊面,以防止惡意攻擊。

CSP必須反映Platform Web SDK的部署和設定方式。 下列CSP顯示SDK可能需要哪些變更才能正常運作。 視您的特定環境而定,可能需要其他CSP設定。

內容安全性原則範例

以下範例說明如何設定CSP。

允許存取邊緣網域

default-src 'self';
connect-src 'self' EDGE-DOMAIN

在上述範例中,EDGE-DOMAIN應該取代為第一方網域。 第一方網域是針對edgeDomain設定所設定。 若尚未設定第一方網域,則應將EDGE-DOMAIN取代為*.adobedc.net。 如果使用idMigrationEnabled開啟訪客移轉,connect-src指示詞也需要包含*.demdex.net

使用NONCE允許內嵌指令碼和樣式元素

Platform Web SDK可以修改頁面內容,而且必須核准才能建立內嵌指令碼和樣式標籤。 若要完成此操作,Adobe建議對default-src CSP指示詞使用Nonce。 Nonce是伺服器產生的密碼編譯增強隨機權杖,每個唯一頁面檢視產生一次。

default-src 'nonce-SERVER-GENERATED-NONCE'

此外,需要將CSP Nonce新增為Platform Web SDK 基底程式碼指令碼標籤的屬性。 然後,Platform Web SDK會在將內嵌指令碼或樣式標籤新增至頁面時,使用該Nonce:

<script nonce="SERVER-GENERATED-NONCE">
  !function(n,o){o.forEach(function(o){n[o]||((n.__alloyNS=n.__alloyNS||
  []).push(o),n[o]=function(){var u=arguments;return new Promise(
  function(i,l){n[o].q.push([i,l,u])})},n[o].q=[])})}
  (window,["alloy"]);
</script>

如果未使用Nonce,則另一個選項是將unsafe-inline新增到script-srcstyle-src CSP指示詞:

script-src 'unsafe-inline'
style-src 'unsafe-inline'
NOTE
Adobe ​建議指定unsafe-inline,因為它允許任何指令碼在頁面上執行,這會限制CSP的優點。

設定CSP以供應用程式內傳訊使用 in-app-messaging

當您設定網頁應用程式內傳訊時,您必須在CSP中包含下列指令:

default-src  blob:;
recommendation-more-help
ad108910-6329-42f1-aa1d-5920a2b13636