CSP, acronimo di Content Security Policy (Politica di Sicurezza dei Contenuti), è un ulteriore livello di sicurezza per i siti web, progettato per rilevare e bloccare attacchi comuni come XSS (Cross-Site Scripting) e injection (iniezione di codice). In sostanza, la CSP funziona come una whitelist (lista bianca), specificando l’origine di script, stili, immagini e frame consentiti sul sito. Questo garantisce che solo le risorse esplicitamente indicate possano essere caricate, bloccando immediatamente qualsiasi richiesta non presente nella whitelist. I browser che non supportano CSP funzionano normalmente con i server che la implementano e viceversa. In caso di mancato supporto, la CSP viene ignorata e il sito applica la politica predefinita.
La CSP funziona aggiungendo l’header HTTP Content-Security-Policy
alla risposta del server. Questo header contiene un insieme di direttive che definiscono quali tipi di contenuto possono essere caricati e da quali origini. Ad esempio, la direttiva script-src
specifica l’origine dei file JavaScript consentiti.
Esistono diverse direttive nella CSP, ognuna delle quali controlla un tipo specifico di risorsa. Alcune direttive comuni includono:
default-src
: Si applica a tutti i tipi di risorse se non viene definita una direttiva specifica.script-src
: Controlla il caricamento dei file JavaScript.style-src
: Controlla il caricamento dei file CSS.img-src
: Controlla il caricamento delle immagini.font-src
: Controlla il caricamento dei font.frame-src
: Controlla il caricamento degli iframe.object-src
: Controlla il caricamento di oggetti incorporati come Flash.media-src
: Controlla il caricamento dei file multimediali come audio e video.
Ogni direttiva può accettare uno o più valori, tra cui:
'self'
: Consente il caricamento di risorse dalla stessa origine del sito web.'none'
: Non consente il caricamento di alcuna risorsa.'unsafe-inline'
: Consente l’uso di codice inline come<script>
o stili inline. Tuttavia, è sconsigliato utilizzare questo valore poiché riduce l’efficacia della CSP.- Un URL specifico: Consente il caricamento di risorse dall’URL specificato.
- Un nome di dominio: Consente il caricamento di risorse da tutti i sottodomini del dominio specificato. Ad esempio,
example.com
consente il caricamento di risorse dawww.example.com
,sub.example.com
, ecc. *
: Wildcard, consente il caricamento di risorse da qualsiasi origine. È sconsigliato utilizzare questo valore poiché disabilita la maggior parte delle funzionalità di sicurezza della CSP.data:
: Consente il caricamento di risorse da URI di dati.https:
: Consente il caricamento di risorse da qualsiasi origine che utilizza HTTPS.
Esempio di una CSP semplice:
Content-Security-Policy: default-src 'self'; img-src 'self' data:; script-src 'self' https://example.com;
Questa CSP consente:
- Il caricamento di tutti i tipi di risorse (eccetto immagini e script) dalla stessa origine del sito web.
- Il caricamento di immagini dalla stessa origine o da URI di dati.
- Il caricamento di script dalla stessa origine o da
https://example.com
.
Per monitorare le violazioni della CSP, è possibile utilizzare la direttiva report-uri
o report-to
. Questa direttiva consente al browser di inviare report sulle violazioni della CSP a un URL specificato. Servizi come report-uri.com
offrono un’interfaccia per raccogliere e analizzare questi report, aiutando a comprendere meglio le vulnerabilità di sicurezza del sito web.
Implementare correttamente la CSP può ridurre significativamente il rischio di attacchi XSS e injection, proteggendo il sito web e gli utenti dalle minacce alla sicurezza informatica.