Verifica dell'intestazione CSP
Basta incollare il valore dell'intestazione Content-Security-Policy per convalidarne in blocco direttive e sorgenti. Rileva le impostazioni pericolose come unsafe-inline, la mancanza di default-src e gli errori di digitazione nei nomi delle direttive, mostrando in modo chiaro le sorgenti ammesse per ciascuna.
Esaminare il contenuto di un'intestazione CSP
Una Content-Security-Policy è un'unica lunga stringa separata da punti e virgola, e seguirla a occhio rende facile lasciarsi sfuggire ciò che vi è di rischioso. Questo strumento prende il valore che incollate, lo scompone in direttive e sorgenti, porta alla luce le impostazioni pericolose, le dichiarazioni assenti e gli errori di grafia, ed espone che cosa ciascuna direttiva consenta davvero.
Una direttiva scritta male è, fra tutti, il caso più insidioso. I browser trascurano in silenzio le direttive che non riconoscono, sicché scrivere scipt-src invece di script-src non provoca errore alcuno mentre quella parte della politica continua a non fare assolutamente nulla. Altrettanto facile da lasciarsi sfuggire è l'assenza di default-src: senza di essa ogni direttiva che non abbiate dettagliato resta senza restrizione e nella difesa si apre una falla. E mettere unsafe-inline in script-src annulla quasi del tutto il blocco degli script in linea, che è la ragione prima per adottare CSP.
Come si usa
-
Incollate il valore dell'intestazione CSP
Inserite una stringa della forma
default-src 'self'; script-src ...così com'è. - Provate prima gli esempi Sono forniti un buon esempio e uno cattivo, così potete vedere in che cosa differiscano i giudizi prima di cominciare.
-
Leggete i punti sollevati
Vengono segnalati
unsafe-inline, l'assenza didefault-srce gli errori di grafia. - Rivedete le sorgenti consentite per ciascuna direttiva A colpo d'occhio vedete da dove il caricamento sia permesso.
Consigli per sfruttarlo al meglio
- La politica si distribuisce di norma come intestazione della risposta HTTP, ma la si può indicare anche con il marcatore
<meta http-equiv="Content-Security-Policy">; alcune direttive, come quella per le segnalazioni, non funzionano però nel metadato. - Prima di applicarla direttamente in produzione, conviene raccogliere le sole segnalazioni di violazione con l'intestazione in sola segnalazione, verificare l'impatto sulle funzioni esistenti e passare poi all'applicazione effettiva.
- Il carattere jolly e il valore 'unsafe-inline' facilitano le prove di funzionamento ma compromettono gravemente l'efficacia della politica contro gli attacchi di scripting fra siti: le impostazioni permissive usate in sviluppo vanno sempre restrette prima della pubblicazione.
- Scrivendo più volte la stessa direttiva vale soltanto la prima. Per aggiungere o sostituire impostazioni occorre riunire le sorgenti in un'unica direttiva.
- Nella console degli strumenti per sviluppatori del navigatore, le risorse bloccate dalla politica compaiono in rosso con un messaggio di rifiuto: è il primo posto da controllare durante la messa a punto.
Quando torna utile
Nell'introdurre per la prima volta una CSP
Potete accertare che la politica scritta faccia ciò che intendevate ben prima che si avvicini alla produzione.
Nel fare l'inventario di una politica esistente
Una politica cresciuta per accumulo tende a conservare permessi per domini che nessuno usa più.
Nel passare dalla sola segnalazione all'applicazione
Un valore provato sotto Content-Security-Policy-Report-Only si può esaminare prima di imporlo.
Nell'assistere una revisione del codice
Incollate la politica modificata e accertate che non ne esca indebolita.
Termini della CSP
- Direttiva
- Una voce come
script-srcoimg-srcche dichiara da dove una data classe di risorsa possa essere caricata. - Default-src
- Il valore di ripiego per ogni direttiva non dichiarata a parte. Ometterla lascia senza restrizione ogni classe che non abbiate dettagliato.
- 'self'
- Un'espressione di sorgente che consente i soli caricamenti dalla stessa origine.
- 'unsafe-inline'
- Un'espressione di sorgente che consente script e stili scritti direttamente nell'HTML. Sacrifica quasi per intero la difesa contro l'XSS, perciò si consiglia di sostituirla con un nonce o un hash. Tenete presente che i browser compatibili con CSP Level 3 ignorano 'unsafe-inline' quando la stessa lista di sorgenti contiene un nonce o un hash: affiancarlo per i browser più vecchi è quindi una pratica comune.
- Nonce
- Un procedimento che scrive un valore casuale a uso singolo sia nel tag dello script sia nella politica, affinché i due si corrispondano. È il modo sicuro di consentire codice in linea.
- Frame-ancestors
- Una direttiva che nomina chi possa incorporare il vostro sito in un riquadro. È l'erede di X-Frame-Options.
Domande frequenti
A proposito — perché è nata la politica di sicurezza dei contenuti, ossia la storia di una difesa che la sola cura nell'uscita non bastava a garantire
La politica di sicurezza dei contenuti nasce da un'idea proposta intorno al 2004 da Robert Hansen, sviluppata in specifica a partire dal 2008 circa soprattutto da Brandon Sterne, ingegnere di Mozilla, e formalizzata nel 2012 come prima raccomandazione candidata del consorzio del web. All'epoca, fra le vulnerabilità delle applicazioni web, gli attacchi di scripting fra siti erano considerati i più gravi, e ci si rese conto che affidarsi soltanto alla diligenza di chi programma nel proteggere ogni uscita aveva dei limiti: nacque così un meccanismo di difesa a più strati, che impone dal lato del navigatore un limite all'origine degli script eseguibili.
Con la seconda versione della specifica si introdusse l'autorizzazione degli script incorporati tramite numero d'uso unico o sintesi, che permette di consentirne alcuni senza ricorrere a 'unsafe-inline'. La terza versione ha aggiunto la parola chiave che considera automaticamente attendibili gli script figli caricati da uno script già attendibile, riducendo di molto il costo di manutenzione degli elenchi di autorizzazione nei siti di grandi dimensioni.
Google lavora da tempo per introdurre nei propri servizi una politica rigorosa fondata sui numeri d'uso unici e da quell'esperienza ha pubblicato una ricerca secondo cui le politiche basate su elenchi di nomi host si aggirano facilmente, mentre quelle fondate su numeri d'uso unici e sintesi sono assai più efficaci. Quelle conclusioni sono oggi ampiamente citate come buona pratica e mostrano quanto conti non soltanto vietare i valori pericolosi, ma decidere fin dall'inizio su quale metodo fondare le autorizzazioni.