Content Security Policy e il tuo CMP: come far funzionare insieme CSP e consenso

Due livelli di sicurezza che devono andare d’accordo

Una Content Security Policy (CSP) indica al browser da quali origini una pagina può caricare script, stili, immagini, frame e richieste di rete. Una piattaforma di gestione del consenso fa il lavoro opposto: decide quali di quegli script possono essere eseguiti in base alla scelta dell’utente. Quando le due sono configurate separatamente, si scontrano. Il CMP non si carica perché la CSP lo blocca, oppure la CSP viene allentata così tanto per accogliere il CMP e i tag pubblicitari da non proteggere più nulla.

Questa guida spiega di quali direttive CSP ha tipicamente bisogno un CMP, come i nonce interagiscono con l’iniezione di script e come rilasciare le modifiche senza rompere il banner.

Di cosa ha di solito bisogno un CMP dalla CSP

I requisiti esatti dipendono dal fornitore, quindi parti sempre dalla documentazione del tuo CMP. In generale, controlla queste direttive:

Sui siti con TCF, ricorda che il CMP crea nella pagina anche un frame localizzatore chiamato __tcfapiLocator. Quel frame viene creato senza sorgente remota, quindi normalmente non richiede una voce in frame-src, ma vale la pena confermarlo durante i test.

Il problema dello stub inline

La maggior parte dei CMP chiede di inserire nella head della pagina un piccolo script inline — lo stub — così che altri script possano accodare chiamate prima che il CMP principale si carichi. Una CSP rigida blocca gli script inline a meno che tu non li consenta esplicitamente. Hai tre opzioni:

  1. Un nonce. Genera un valore casuale per ogni risposta, aggiungilo all’intestazione CSP come 'nonce-...' e al tag <script> dello stub. È l’opzione più flessibile per le pagine dinamiche.
  2. Un hash. Aggiungi a script-src l’hash SHA-256 del contenuto esatto dello stub. Funziona bene per i siti statici, ma qualsiasi modifica allo stub, anche uno spazio, lo rompe.
  3. Ospitare lo stub in proprio come file esterno sul tuo dominio, coperto da 'self'. Richiede attenzione per garantire che si carichi abbastanza presto.

Evita 'unsafe-inline' come scorciatoia. Consente ogni script inline, eliminando gran parte della protezione che la CSP offre.

Nonce e script iniettati dal CMP

Un CMP che blocca gli script fino al consenso spesso funziona trattenendoli e iniettandoli più tardi. Con una CSP basata sui nonce, anche quegli script iniettati devono essere consentiti. Ci sono due approcci comuni:

I tag manager pongono la stessa questione. Se carichi i tag pubblicitari e di analytics tramite un tag manager, segui la sua documentazione sui nonce e assicurati che CMP e tag manager adottino un approccio coerente.

I tag pubblicitari rendono la CSP più difficile

La pubblicità programmatica carica script e frame da molti domini, e l’elenco cambia al cambiare dei partner di domanda. I publisher fanno di solito una di queste due scelte:

In entrambi i casi, il CMP dovrebbe essere nella lista di autorizzazione in modo esplicito, non coperto solo da un carattere jolly, così che una modifica alla CSP non disattivi mai il banner in silenzio.

Rilascia con la modalità report-only

Usa prima l’intestazione Content-Security-Policy-Report-Only. Il browser segnala le violazioni senza bloccare nulla, così puoi vedere cosa romperebbe una nuova policy.

  1. Distribuisci la policy in modalità report-only con un endpoint di segnalazione.
  2. Carica le pagine in profili del browser puliti e percorri l’intero flusso di consenso: prima visita, accetta tutto, rifiuta tutto, scelta personalizzata, revoca.
  3. Esamina i report delle violazioni e la console del browser alla ricerca di risorse del CMP bloccate.
  4. Regola la policy, poi passa all’applicazione effettiva.
  5. Mantieni attive le segnalazioni dopo l’applicazione per individuare le regressioni.

Sintomi di un conflitto con la CSP

Punti chiave

← Blog Leggi tutto →