Cookie Questo sito conserva solo ciò che serve per funzionare. Al momento non ci sono né statistiche né pubblicità, e nulla di quanto trovi qui ti segue su altri siti. Leggi l’informativa sulla privacy

Scegli cosa consentire
+92 312 8299940Preventivo gratuito
Blog

Content Security Policy: aggiungi una CSP senza rompere il sito

Content Security Policy spiegata in modo semplice: parti rigoroso, leggi la console, consenti solo il necessario e prova con Report-Only.

By the Denwix team 6 min read

Cos’è una Content Security Policy?

Una Content Security Policy, o CSP, è un header di risposta che elenca da dove una pagina può caricare script, stili, font, immagini e frame. Tutto ciò che non è nell’elenco viene bloccato.

Il suo compito principale è fermare il cross-site scripting. Se un attaccante riesce a inserire uno script nella pagina, il browser si rifiuta comunque di eseguirlo, perché non è nell’elenco. Quindi una buona policy rende innocui molti bug pericolosi.

Schema: parti rigoroso in Report-Only, leggi la console, poi consenti esattamente host e hash che usi
Costruisci la policy in tre passi, così non si rompe nulla.

Passo 1: parti rigoroso

Inizia con la policy utile più rigorosa. Nel file .htaccess su Apache aggiungi una riga che consente solo i file del tuo sito:

Header always set Content-Security-Policy "default-src 'self'"

Poi ricarica la pagina. Si apre ancora, ma alcune parti possono rompersi. Nella nostra demo è sparito un banner di spedizione gratuita aggiunto da un piccolo script in linea, e il font del titolo è cambiato. È previsto, perché ora la policy li blocca.

Passo 2: leggi la console

Apri gli strumenti per sviluppatori del browser e guarda la console. Ogni file bloccato compare lì con la regola che l’ha bloccato. Nella nostra demo la policy ha bloccato il foglio di stile di Google Fonts e lo script in linea.

Questo elenco è la tua lista di cose da fare. Scorrilo riga per riga e chiediti ogni volta: mi serve davvero? Se no, toglilo dalla pagina invece di consentirlo.

Passo 3: consenti solo il necessario

Ora aggiungi eccezioni precise. Per Google Fonts consenti gli stili da fonts.googleapis.com e i file dei font da fonts.gstatic.com:

Header always set Content-Security-Policy "default-src 'self'; style-src 'self' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com"

Script in linea: usa un hash

Per un piccolo script in linea aggiungi il suo hash a script-src. L’hash consente quello script esatto e nient’altro. Inoltre la console di Chrome mostra l’hash nel messaggio di errore. Copialo nella policy:

script-src 'self' 'sha256-AbC123...='
Demo: dopo aver consentito gli host dei font e l’hash dello script, la pagina mostra banner e font senza errori
Con eccezioni precise la pagina funziona e la console resta pulita.

Se lo script cambia spesso, un nonce è più semplice: il server aggiunge un nuovo valore casuale alla policy e a ogni tag script a ogni richiesta. In questo modo la policy resta rigorosa.

Prova prima con Report-Only

Su un sito online non attivare mai una nuova policy senza prova. Invece inviala come Content-Security-Policy-Report-Only. Così il browser segnala ogni problema nella console ma non blocca nulla, e i visitatori non vedono mai una pagina rotta.

Header always set Content-Security-Policy-Report-Only "default-src 'self'"

Visita ogni tipo di pagina per qualche giorno: home, articoli, cassa e moduli. Quando la console resta pulita, rinomina l’header nella vera Content-Security-Policy.

Esempi pronti

Ogni sito è diverso, quindi usali come punto di partenza. Poi controllali con la console.

Un semplice sito statico

default-src 'self'; img-src 'self' data:; object-src 'none'; base-uri 'self'; frame-ancestors 'self'

Un sito con Google Analytics

default-src 'self'; script-src 'self' https://www.googletagmanager.com; connect-src 'self' https://www.google-analytics.com; img-src 'self' https://www.google-analytics.com

Direttive utili in ogni policy

object-src 'none' blocca i vecchi plugin, base-uri 'self' ferma un falso link di base e frame-ancestors 'self' impedisce ad altri siti di inquadrare le tue pagine. Non rompono quasi mai nulla.

Come controllare la tua policy

Per prima cosa controlla gli header online con il nostro HTTP Header Checker gratuito. Mostra la policy esatta che ricevono i visitatori e segnala le parti mancanti o deboli.

Poi apri le pagine più importanti con la console aperta. Se non vedi errori CSP rossi, la policy va bene per il sito. Infine ricontrolla dopo ogni nuovo plugin, widget o codice di tracciamento, perché ognuno può chiedere la sua eccezione.

Errori comuni

  • Aggiungere 'unsafe-inline' per far sparire gli errori. Lascia passare anche gli script iniettati, proprio ciò che la policy deve fermare.
  • Usare un carattere jolly come https: in script-src, che consente script da qualsiasi sito.
  • Attivare una nuova policy senza provarla prima in Report-Only.
  • Inviare due policy diverse da server e plugin; il browser le applica entrambe, quindi vince la regola più rigorosa.
  • Dimenticare di aggiornare la policy dopo un nuovo servizio.

In breve: parti rigoroso, leggi la console, consenti host e hash precisi e prova in Report-Only. Per ogni direttiva nel dettaglio leggi la guida MDN su CSP.

Domande e risposte

Cos’è una Content Security Policy?

Un header di risposta che dice al browser da quali fonti una pagina può caricare script, stili, font e altri file. Tutto il resto viene bloccato.

Perché il sito si rompe dopo aver aggiunto una CSP?

Perché la policy blocca i file che non sono nel suo elenco. Quindi apri la console, leggi ogni elemento bloccato e consenti solo ciò che serve davvero.

Cos’è Content-Security-Policy-Report-Only?

Una versione di prova dell’header. Il browser segnala ogni problema senza bloccare nulla, così regoli la policy senza rischi.

Devo usare unsafe-inline?

No, perché consente ogni script in linea, anche quelli iniettati. Invece usa un hash o un nonce per i pochi script che ti servono.

Come consento uno script in linea?

Aggiungi il suo hash sha256 a script-src. Infatti la console di Chrome mostra l’hash nell’errore, quindi puoi copiarlo.

Che differenza c’è tra hash e nonce?

Un hash corrisponde a uno script esatto. Invece un nonce è un valore casuale che cambia a ogni richiesta e sta nella policy e nel tag script.

Come consento Google Fonts in una CSP?

Consenti fonts.googleapis.com in style-src e fonts.gstatic.com in font-src.

Una CSP aiuta la SEO?

Non direttamente. Tuttavia protegge visitatori e sito, e così mantiene le pagine sicure e affidabili.

Posso mettere una CSP in un tag meta?

Sì, con un tag meta http-equiv, tuttavia alcune direttive come frame-ancestors funzionano solo nel vero header.

Come aggiungo una CSP su Nginx?

Usa add_header Content-Security-Policy "..." always; nel blocco server, poi ricarica Nginx.

WordPress funziona con una CSP rigorosa?

Spesso sì nella parte pubblica, ma molti plugin aggiungono script in linea. Quindi prova in Report-Only e aggiungi hash o nonce dove serve.

Cosa fa default-src?

È la regola di riserva per ogni tipo di file senza direttiva propria, come script-src o img-src.

Cos’è frame-ancestors?

Una direttiva che dice quali siti possono mostrare la tua pagina in un frame. Con 'self' impedisci quindi agli altri di inquadrarla, e così blocchi il clickjacking.

Posso avere due header CSP?

Il browser li applica entrambi e un file deve superarli tutti e due. Perciò la pagina diventa spesso più rigorosa del previsto; tienine uno.

Perché la console mostra errori CSP delle estensioni?

Perché alcune estensioni inseriscono script e generano avvisi. Quindi prova in una finestra privata.

Come consento immagini da un altro dominio?

Aggiungi quel dominio a img-src, per esempio img-src 'self' https://images.example.com.

Cosa fa object-src 'none'?

Blocca i vecchi contenuti dei plugin come Flash. I siti moderni non ne hanno mai bisogno, perciò bloccarlo è sicuro.

Una CSP basta contro lo XSS?

È un livello in più robusto, tuttavia devi comunque fare l’escape dell’output e validare l’input sul server.

Come controllo la mia CSP?

Per prima cosa usa il nostro HTTP Header Checker gratuito per vedere l’header online, poi visita le pagine principali con la console aperta.

Il SEO Checker controlla la CSP?

Sì. Il nostro SEO Checker mostra se l’header viene inviato e porta a questa guida quando manca.

Guida video

Come aggiungere una Content Security Policy

In questo breve video vedi lo strumento dal primo all’ultimo clic. Scegli la tua lingua qui sotto e attiva i sottotitoli se ti aiutano.

Controlla i tuoi header di sicurezza

Inserisci il tuo URL nell’HTTP Header Checker per vedere la tua Content-Security-Policy e tutti gli altri header di sicurezza.