Curious TechieDev Toolbox
Tutte le Guide/Sicurezza10 min read

Cos’è Content Security Policy (CSP) e come blocca gli attacchi XSS?

Guida a CSP Level 3: sintassi delle direttive, nonce crittografici, verifica con hash e configurazione di header sicuri.

Punti Chiave
  • Il CSP è un header HTTP di risposta che limita le sorgenti autorizzate a eseguire script e caricare contenuti.
  • Rappresenta la principale difesa architetturale contro le vulnerabilità Cross-Site Scripting (XSS).
  • CSP Level 3 promuove l’utilizzo di nonce crittografici e hash anziché liste di domini generiche.
  • La direttiva frame-ancestors 'none' sostituisce X-Frame-Options contro il Clickjacking.
  • L’header Content-Security-Policy-Report-Only permette di testare le policy senza bloccare gli utenti.

1. Cos’è la Content Security Policy (CSP)?

La Content Security Policy (CSP) è un header di risposta HTTP standardizzato dal W3C che consente di definire le origini approvate per il caricamento e l’esecuzione di risorse nel browser.

Limitando l’origine di script, fogli di stile e connessioni, la CSP rappresenta la difesa più efficace contro attacchi Cross-Site Scripting (XSS) ed esfiltrazione di dati.

2. Panoramica delle Direttive Principali

DIRETTIVACONTROLLAVALORE SICURO DI DEFAULT
default-srcFallback per tutte le direttive di caricamento non specificate'self'
script-srcSorgenti autorizzate per l’esecuzione JavaScript'self' 'nonce-...'
style-srcOrigini consentite per CSS e stili inline'self' 'unsafe-inline'
connect-srcDestinazioni permesse per Fetch, XHR e WebSocket'self' https://api.domain.com
frame-ancestorsDomini autorizzati a incorporare la pagina in un <iframe>'none'

3. Politiche Basate su Nonce vs Hash

Le policy storiche basate su whitelist di domini sono risultate vulnerabili a bypass tramite CDN. Gli standard moderni esigono un controllo basato su nonce.

La Strict CSP (Livello 3) supera questo limite introducendo nonce crittografici per singola richiesta:

Content-Security-Policy: script-src 'nonce-rAnd0m123' 'strict-dynamic'; object-src 'none';

4. Frame Ancestors vs X-Frame-Options

Mentre X-Frame-Options: DENY è ancora supportato per retrocompatibilità, la direttiva frame-ancestors della CSP è lo standard moderno per difendersi dal clickjacking.

5. Piano di Rilascio in 3 Fasi

Fase 1: Modalità Solo Report (Report-Only): Configura <code>Content-Security-Policy-Report-Only</code> per registrare le violazioni senza bloccare l’esperienza dell’utente.
Fase 2: Refactoring del Codice Inline: Sposta gli attributi inline <code>onclick="..."</code> in event listener registrati in script esterni.
Fase 3: Applicazione Rigida: Attiva l’header <code>Content-Security-Policy</code> definitivo impostando <code>object-src 'none'</code>.