Content Security Policy in breve
La Content Security Policy (CSP) è un'header HTTP che istruisce il browser sui domini e tipi di risorse che possono essere caricati su una pagina. È un meccanismo di difesa contro attacchi XSS e clickjacking. Una policy troppo restrittiva o configurata male blocca però risorse legittime, rendendo il sito non funzionante.
Sintomi di CSP bloccante
In console del browser appaiono messaggi come: "Refused to load the script 'https://cdn.example.com/lib.js' because it violates the following Content Security Policy directive: script-src 'self'". Script esterni, font, immagini o iframe non vengono caricati e il sito appare rotto o senza stile.
Diagnosi della policy attiva
Da terminale: curl -I https://tuosito.it | grep -i content-security. La policy viene anche stampata nei dev tools alla sezione Network. Analizzala con tool come csp-evaluator.withgoogle.com di Google, che evidenzia rischi e direttive mancanti o troppo restrittive.
Direttive principali
Le direttive più importanti sono: default-src (fallback per tutte le altre), script-src (script JS), style-src (CSS), img-src (immagini), font-src (font), connect-src (fetch/XHR/WebSocket), frame-src (iframe). Ogni direttiva accetta una lista di origin autorizzati separati da spazio.
Modalità report-only
Per testare una policy senza bloccare nulla, usa Content-Security-Policy-Report-Only invece di Content-Security-Policy. Le violazioni vengono inviate all'URL specificato in report-uri (o report-to) senza bloccare le risorse. È il modo corretto di implementare CSP gradualmente in produzione.
Allowlist comuni
Servizi tipici da autorizzare includono: https://www.googletagmanager.com per GTM, https://www.google-analytics.com per GA, https://fonts.googleapis.com per Google Fonts, https://cdn.jsdelivr.net per CDN JS, https://www.youtube.com per video embed. Aggiungili alla direttiva appropriata.
Inline script e nonce
CSP rigorosa blocca <script>...</script> inline. Per autorizzarli usa nonce: genera un valore random per ogni richiesta, includilo nella direttiva script-src 'nonce-XXXX' e nell'attributo nonce="XXXX" dello script. Alternativa è usare hash SHA-256 dello script, ma è rigido se il contenuto cambia.
Plugin WordPress e CSP
Molti plugin WordPress (Elementor, WooCommerce, Yoast) inseriscono inline script senza nonce. Configurare una CSP rigorosa con WordPress spesso richiede compromessi: usa 'unsafe-inline' per style-src e considera plugin specifici come "HTTP Headers" per facilitare la configurazione progressiva.
Hai bisogno di aiuto?
Se il tuo sito ha problemi di accesso, il team di G Tech Group può aiutarti. Contattaci tramite il modulo di contatto.