Defaults.Exposed

Defaults.ExposedCorrezioni › Content-Security-Policy (CSP)

Come correggere Content-Security-Policy (CSP)

Una Content Security Policy è una regola di sicurezza che il tuo sito consegna al browser di ogni visitatore, dicendogli esattamente quale codice è autorizzato a eseguire. Senza, se qualcosa di malevolo finisce mai su una pagina — tramite un box commenti, un plugin violato, o uno script di terze parti — il browser lo eseguirà liberamente, incluso codice che ruba in silenzio i numeri di carta e le password dei tuoi clienti mentre li digitano, con il lucchetto ancora visibile.

In sintesi per la tua attività: Se il tuo sito viene mai manomesso, del codice malevolo può leggere i dati di carta di pagamento e di accesso dei tuoi clienti direttamente dal tuo stesso checkout mentre tutto sembra del tutto normale — lasciandoti con storni, richieste per frode, una violazione dei dati da segnalare, e un fallimento di controllo che gli uffici sicurezza dei clienti più grandi usano per bloccare o uccidere un affare.

Cosa può costarti

Perché è importante. Il lucchetto dimostra che la connessione al tuo sito è privata, ma non fa nulla per controllare quale codice viene eseguito una volta che un visitatore è sulla pagina. Una Content Security Policy è la salvaguardia che lo fa — dice ai browser di ignorare qualsiasi script che non provenga da una fonte di cui ti fidi, così che un singolo campo, annuncio o plugin manomesso non possa essere trasformato in uno strumento per rubare denaro e dati ai tuoi clienti. È un controllo valutato sulla tua scorecard, del valore di punti reali, e una delle prime cose che una revisione di sicurezza professionale cerca.

Cos’è, in parole semplici

Quando qualcuno visita il tuo sito, il suo browser scarica la tua pagina ed esegue qualunque codice ci sia sopra — gli script che fanno scendere i menu, funzionare i pulsanti, inviare i moduli di pagamento, e così via. Per impostazione predefinita, il browser si fida di tutto. Non ha modo di sapere quale codice è davvero tuo e quale è stato infilato da qualcun altro.

Una Content Security Policy (spesso abbreviata in CSP) è un breve elenco di regole che il tuo sito allega a ogni pagina, dicendo al browser: «esegui solo codice dalle fonti che ho approvato, e rifiuta tutto il resto». È la differenza tra una discoteca che fa entrare chiunque e una con una lista di invitati all’ingresso.

Il motivo per cui questo conta così tanto è che i siti vengono manomessi di continuo — non sempre violando il tuo server, ma attraverso le porte sul retro che la maggior parte dei siti lascia aperte: un campo commenti, una casella di ricerca, un plugin non aggiornato, uno script di terze parti per annunci o statistiche, o un widget di chat. Se un attaccante riesce a far finire anche una sola riga del proprio codice su una delle tue pagine, il browser la esegue come se fosse tua. Da lì può leggere tutto ciò che i tuoi clienti digitano — numeri di carta, password, indirizzi — e inviarlo in silenzio altrove. Una Content Security Policy chiude quella porta rifiutandosi di eseguire qualsiasi cosa da una fonte che non hai approvato.

Quanto può costarti

Non è astratto. L’attacco che una Content Security Policy previene — codice iniettato in una pagina che ruba dati ai tuoi stessi clienti — è dietro alcune delle più grandi violazioni di skimming di carte mai registrate. Ecco come tende a svilupparsi per un’azienda normale:

Cos’è davvero (il dettaglio)

Una Content Security Policy viene consegnata come una singola intestazione di risposta HTTP — una riga che il tuo server web invia con ogni pagina. Il suo valore è un insieme di direttive, ciascuna che nomina un tipo di contenuto e le fonti permesse per esso. Per esempio:

Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'self'

In parole semplici, significa: per impostazione predefinita carica solo cose dal mio stesso sito; esegui script solo dal mio stesso sito; non permettere vecchi plugin; e non lasciare che altri siti incorporino il mio in un frame.

Com’è fatto un «buono». Il nostro controllo non cerca solo la presenza dell’intestazione — legge la policy direttiva per direttiva e valuta quanto sia davvero forte, come farebbe un revisore di sicurezza. Una policy forte:

Una policy che esiste ma si appoggia a 'unsafe-inline', 'unsafe-eval', o a jolly otterrà comunque un punteggio scarso — perché in pratica fornisce poca protezione reale. L’obiettivo è una policy stretta, non una policy qualsiasi.

Come sistemarlo (gratis, ~1-2 ore)

Passa questo alla tua persona IT o a chi gestisce il tuo sito — la correzione in sé è completamente gratuita. Facciamo pagare solo il monitoraggio nel tempo, perché resti in posizione e resti corretta; attivarla non costa nulla. Il motivo per cui richiede un’ora o due invece di pochi minuti è l’attento passo di prova che impedisce di bloccare per sbaglio parti del tuo stesso sito.

  1. Parti in modalità report-only — non imporre ancora. Aggiungi un’intestazione di risposta Content-Security-Policy-Report-Only. Questa osserva e registra ciò che verrebbe bloccato senza bloccare effettivamente nulla, così il sito in produzione continua a funzionare mentre impari da cosa dipende davvero ogni pagina. (Importante: il report-only da solo non dà alcuna protezione ai visitatori — è solo il primo passo sicuro.)

  2. Costruisci la policy da ciò che il tuo sito usa davvero. Esamina i report per trovare ogni fonte legittima di script, stili, font e immagini — il tuo dominio, le tue statistiche, il tuo provider di pagamenti, il tuo host dei font, il tuo widget di chat — ed elencale come fonti permesse. Un solido punto di partenza è default-src 'self' più voci esplicite per le terze parti fidate che usi davvero.

  3. Evita le scappatoie che vanificano tutto il senso. Stai alla larga da 'unsafe-inline' e 'unsafe-eval' per gli script, ed evita fonti jolly come * e schemi nudi come https: per gli script — questi riaprono esattamente la lacuna che la policy dovrebbe chiudere. Dove gli script inline sono inevitabili, usa un nonce o un hash così che venga eseguito solo il tuo specifico codice approvato.

  4. Blinda incorporamento in frame e plugin. Aggiungi frame-ancestors 'self' (che impedisce anche ad altri siti di incorporare il tuo per ingannare i tuoi clienti, e soddisfa il relativo controllo sul clickjacking) e object-src 'none' per bloccare i vecchi attacchi basati su plugin.

  5. Passa da report-only a imposizione. Una volta che i report sono puliti e il sito funziona, cambia il nome dell’intestazione da Content-Security-Policy-Report-Only a Content-Security-Policy. Questo è il passo che davvero fornisce protezione — una policy in sola report-only non lo fa, e non supererà il controllo.

    Dove impostare l’intestazione dipende dalla tua piattaforma:

    • Cloudflare: Rules → Transform Rules → Modify Response Header → imposta Content-Security-Policy. (Puoi usare Cloudflare anche per la prova report-only.)
    • Nginx: add_header Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'self';" always;
    • Apache: Header always set Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'self';"
    • IIS (web.config): aggiungi un’intestazione di risposta HTTP personalizzata di nome Content-Security-Policy con la policy come valore.
    • Google Workspace / Microsoft 365: questi gestiscono la tua email, non il tuo sito pubblico, quindi la policy si imposta ovunque sia davvero ospitato il tuo sito (Cloudflare o il tuo host web qui sopra), non nella console admin della tua email.
  6. Ricontrolla il tuo dominio per confermare che la policy ora risulti attivata e di imposizione, senza scappatoie che la indeboliscono.

Errori comuni

FAQ

Non sono una persona tecnica — posso occuparmene da solo?

Non devi capire i dettagli. È un'impostazione aggiunta da chi gestisce il tuo sito o il tuo hosting, e su servizi come Cloudflare è in gran parte guidata. Passa loro la sezione «Come sistemarlo» qui sotto. È gratuita; l'unica cautela è che andrebbe distribuita con attenzione prima in una prova di sola-osservazione, così da non bloccare per sbaglio parti del tuo stesso sito — che è esattamente ciò che i passi coprono.

Ho già il lucchetto e un certificato SSL — il mio sito non è sicuro?

Il lucchetto mette in sicurezza la consegna della tua pagina; non controlla cosa viene eseguito al suo interno. Se del codice malevolo finisce mai su una pagina — tramite un plugin violato, un annuncio compromesso, o un campo iniettato — il lucchetto non gli impedirà di rubare dati. Una Content Security Policy è lo strato che limita cosa è autorizzato a eseguire, prima di tutto. Proteggono cose diverse, e li vuoi entrambi.

Attivare questo potrebbe rompere il mio sito?

Può succedere se viene attivato in modo aggressivo tutto in una volta, perché potrebbe bloccare script legittimi che usi davvero. È per questo che l'approccio standard è partire in modalità di prova «report-only» che osserva senza bloccare, sistemare tutto ciò che segnala, e solo allora imporlo. Fatto così è sicuro — e il passo di prova è integrato nella correzione qui sotto.

L'abbiamo già messo in modalità «report-only» — siamo coperti?

No, ed è il falso senso di sicurezza più comune. La modalità report-only osserva e registra ciò che verrebbe bloccato, ma non blocca nulla — i visitatori ottengono zero protezione reale. È solo il primo passo sicuro. Il nostro controllo dà al report-only una piccola frazione del credito di una policy reale e non lo registrerà come superamento. Sei protetto solo una volta che passi alla modalità di imposizione.

Questo incide sul nostro punteggio, o è solo consultivo?

Incide sul tuo punteggio. Il controllo della Content Security Policy è valutato e vale fino a 25 punti nella categoria Sicurezza Web. Una policy mancante o debole è marcata ad alta severità e trascina giù la tua valutazione — ed è esattamente il tipo di lacuna su cui il questionario di sicurezza di un cliente fa domande.

Il nostro sviluppatore ha aggiunto una policy ma il punteggio è ancora basso — perché?

Una policy può esistere ed essere comunque debole. I colpevoli più comuni sono scappatoie come «unsafe-inline» e «unsafe-eval» per gli script, o fonti jolly (un asterisco nudo), che riaprono esattamente la lacuna che la policy dovrebbe chiudere. Il nostro controllo legge la policy direttiva per direttiva e penalizza quelle debolezze — una policy che permette qualsiasi cosa vale poco più che non averne nessuna. La correzione è irrigidire le regole sugli script usando nonce o hash invece di quelle scappatoie.