Come correggere un header Content-Security-Policy (CSP) mancante | Scanthra
Maggio 2026Cos'è l'header Content-Security-Policy?
CSP (Content Security Policy) è un'intestazione di risposta che dice al browser esattamente quali sorgenti di script, stili, immagini e frame è autorizzato a caricare. Se qualcosa sulla pagina cerca di caricare uno script da un dominio non nella tua lista di consentiti, il browser rifiuta. È come una lista ospiti per il buttafuori all'ingresso.
Senza CSP, qualsiasi tag <script> iniettato — da un
plugin compromesso, un errore in un widget di terze parti, un XSS memorizzato in un commento — esegue
con pieno accesso ai cookie, ai dati dei moduli e alla sessione dei tuoi visitatori. Con un
CSP rigoroso, la stessa iniezione viene bloccata silenziosamente e registrata.
Perché questo è importante per una piccola impresa
Due esempi reali che vediamo ogni settimana nei report Scanthra:
- Skimming di carte sui checkout — una libreria JavaScript compromessa su un negozio WooCommerce legge i numeri di carta e li esfiltia. Con CSP, quella richiesta di esfiltrazione verso un dominio dell'attaccante viene bloccata.
- Defacement e overlay di phishing — uno script iniettato sostituisce il tuo modulo di contatto con uno che invia e-mail all'attaccante. CSP si rifiuterebbe di caricare lo script sconosciuto in primo luogo.
CSP è anche esplicitamente raccomandato da OWASP (standard di sicurezza delle app), atteso dalla maggior parte dei questionari di cyber assicurazione, e — per le imprese UE — una parte ragionevole delle "misure tecniche adeguate" richieste dal GDPR Articolo 32 e dalla Direttiva NIS2 (direttiva UE sulla cybersecurity).
Il rollout sicuro: prima la modalità report-only
Il motivo principale per cui i piccoli siti evitano CSP è la paura di rompere il layout.
La soluzione: distribuisci prima Content-Security-Policy-Report-Only. Il
browser controlla la policy e segnala le violazioni, ma non
le applica. Monitora i log per una settimana, correggi ciò che viene bloccato, poi passa
all'header di applicazione.
Una policy di partenza che funziona per la maggior parte dei siti
Content-Security-Policy-Report-Only:
default-src 'self';
script-src 'self' https://www.googletagmanager.com https://www.google-analytics.com;
style-src 'self' 'unsafe-inline' https://fonts.googleapis.com;
font-src 'self' https://fonts.gstatic.com;
img-src 'self' data: https:;
connect-src 'self' https://www.google-analytics.com;
frame-ancestors 'none';
base-uri 'self';
form-action 'self';
upgrade-insecure-requests
Questa policy assume che tu serva tutto dal tuo dominio più Google Analytics + Google Fonts. Quasi ogni sito WordPress, Shopify o statico si adatta qui con piccole modifiche. Rimuovi o sostituisci le righe GA/Fonts se non le usi.
Come distribuire su nginx
add_header Content-Security-Policy-Report-Only "default-src 'self'; script-src 'self' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' data: https:; frame-ancestors 'none'; base-uri 'self'; form-action 'self'; upgrade-insecure-requests" always;
Come distribuire su Apache
Header always set Content-Security-Policy-Report-Only "default-src 'self'; script-src 'self' https://www.googletagmanager.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; img-src 'self' data: https:; frame-ancestors 'none'; base-uri 'self'; form-action 'self'; upgrade-insecure-requests"
Come distribuire su Cloudflare
Nella tua dashboard Cloudflare vai su Rules → Transform Rules → HTTP
Response Header Modification. Aggiungi un header chiamato
Content-Security-Policy-Report-Only con la policy sopra come
valore. Questa è l'opzione più veloce se non hai accesso shell al
tuo server.
Come distribuire su WordPress
Installa un plugin per gli header come Headers Security Advanced &
HSTS WP o aggiungi gli header tramite il pannello del tuo hosting. Evita di impostare CSP
nel functions.php del tema — molti temi caricano
asset WP-admin o del block editor dinamicamente e questo rompe l'esperienza dell'editor.
Insidie comuni
- Script inline. Se il tuo CMS (sistema di gestione contenuti) inietta tag
<script>inline, vedrai violazioni. La correzione è usare nonce (meglio) o, come misura temporanea,script-src 'self' 'unsafe-inline'— ma pianifica di rimuovere'unsafe-inline'entro uno sprint. - Google Tag Manager. GTM carica altri script a runtime da host di terze parti. O pre-dichiara quegli host nella tua policy o usa i Custom Templates integrati di GTM con una strategia nonce.
- YouTube / Vimeo incorporati. Aggiungi
frame-src https://www.youtube.com https://player.vimeo.com. - Endpoint di segnalazione. Aggiungi
report-uri /csp-reportoreport-tocosì catturi le violazioni lato server. Alcuni host (Cloudflare, Sentry) offrono endpoint CSP gratuiti per la segnalazione.
Da report-only all'applicazione
Dopo una settimana di report-only senza nuove violazioni sul traffico reale, rinomina
l'header da Content-Security-Policy-Report-Only a
Content-Security-Policy. La policy è ora applicata. Mantieni
l'endpoint di segnalazione — catturerai nuove violazioni nel momento in cui un aggiornamento di plugin
introduce uno script imprevisto.
Come Scanthra rileva questo
Il nostro modulo Security Headers esegue un singolo GET alla tua homepage
e legge le intestazioni di risposta. Se Content-Security-Policy
è mancante, debole, o contiene unsafe-eval, otterrai un
problema rilevato con gravità, descrizione in linguaggio semplice e correzione da copiare e incollare —
stessa forma di questo articolo.
Vuoi sapere se il tuo sito ha questo problema?
Scanthra esegue un controllo passivo e discreto, e ti invia un report PDF in linguaggio semplice.
Analizza il tuo sito gratis