設定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-src
和style-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