Data di pubblicazione: 17 novembre 2025
A partire da Chrome 141, puoi partecipare alla prova dell'origine per testare le nuove funzionalità di Content Security Policy (CSP) che Chrome sta introducendo. Queste funzionalità aiutano i siti web a proteggersi dagli attacchi XSS consentendo meglio l'inserimento nella lista consentita di fonti note di JavaScript. L'inserimento nella lista consentita di JavaScript noti e il blocco di tutte le altre origini è un modo efficace per prevenire gli attacchi XSS. Il codice JavaScript inserito dall'autore dell'attacco non sarà presente nella lista consentita e pertanto verrà bloccato.
Senza queste funzionalità, è difficile avere una CSP "rigida" che consenta tutte le origini JavaScript senza un meccanismo di comunicazione nonce tra l'host dello script e il sito o senza conoscere in anticipo l'hash completo dello script. Entrambi i metodi sono difficili da implementare se lo script cambia di frequente ed è ospitato da una terza parte attendibile, ma separata. Inoltre, se uno script deve utilizzare eval, attualmente CSP richiede di inserire eval nella lista consentita per tutti gli script, rendendolo molto più debole.
Stiamo cercando di colmare questa lacuna fornendo un meccanismo più efficace per
la creazione di liste consentite basate su URL degli script in script-src e un meccanismo per
la creazione di liste consentite per le chiamate a eval. Potrai utilizzare il meccanismo di hashing esistente in
script-src per inserire nella lista consentita gli URL di script specifici e JavaScript passati a
eval (e altre funzioni simili a eval). Anche se l'inserimento nella lista consentita basato su URL non è
rigido come un CSP basato sull'integrità, questo meccanismo dovrebbe rappresentare un grande
miglioramento rispetto alla lista consentita di nomi host esistente.
Riteniamo che questo fornisca un criterio CSP più facile da implementare che mitiga comunque in modo efficace gli attacchi XSS bloccando gli script in linea e di valutazione non consentiti. Queste nuove funzionalità sono progettate e implementate con cura per consentire ai siti di impostare un criterio che offra una maggiore sicurezza nei browser che supportano la nuova funzionalità, senza causare interruzioni o regressioni della sicurezza nei browser che non la supportano, senza dover eseguire lo sniffing dello user agent.
Casi d'uso
Inserire URL specifici nella lista consentita per l'utilizzo con script-src
I siti che vogliono inserire nella lista consentita script specifici da utilizzare con script-src attualmente
hanno due opzioni: inserire nella lista consentita i contenuti degli script tramite l'integrità delle risorse secondarie
(SRI) o utilizzare host-source per inserire nella lista consentita i nomi host. L'integrità secondaria delle risorse spesso non è pratica per
gli script che cambiano spesso (ad esempio, gli script di analisi). La specifica di
host-source verrà ignorata quando è impostato anche strict-dynamic e non è una
protezione completa, poiché non include i parametri URL. Questa modifica
consentirà di inserire nella lista consentita gli script utilizzando un hash del loro URL (completo), supportando
sia gli script dinamici sia le configurazioni che utilizzano strict-dynamic.
Consenti l'utilizzo di script specifici con funzioni eval o simili
Alcuni siti richiedono l'utilizzo di funzioni eval o simili (passaggio di codice come
stringhe letterali in setTimeout, setInterval e setImmediate). Per questi siti,
l'unica opzione CSP disponibile è unsafe-eval, che attiva tutte le chiamate
a eval. Stiamo aggiungendo un meccanismo per consentire l'inserimento di input specifici nella lista consentita per la valutazione. Questo
nuovo meccanismo consente di creare una lista consentita ristretta degli script specifici necessari
eseguendo l'hashing dei contenuti dello script direttamente, anziché essere costretti a fornire una
CSP unsafe-eval eccessivamente ampia.
Inizia
Per provare il supporto dell'hashing di script e eval, partecipa alla
prova dell'origine di hash di URL e eval in CSP script-src,
in esecuzione da Chrome 141 a 144.
Aggiungi hash a script-src
Gli URL vengono inseriti nella lista consentita aggiungendo un valore alla direttiva CSP script-src nel formato url-<hash-algorithm>-<script-url-hash>. In questo modo, tutti i contenuti pubblicati dall'URL, indipendentemente dal tipo, potranno essere eseguiti. L'hash deve
includere solo l'URL iniziale (l'URL incluso nella pagina), non gli URL
a cui reindirizza l'URL. Sono supportati sia gli URL assoluti che quelli relativi.
Ad esempio, la seguente intestazione CSP inserirà nella lista consentita lo script pubblicato all'indirizzo https://example.com/example.js:
Content-Security-Policy: script-src 'sha256-u2cYltM/2wbvoRR0jMZ57KmFdVqqdPYa6GtdykFwBGc=';
dove 'sha256-u2cYltM/2wbvoRR0jMZ57KmFdVqqdPYa6GtdykFwBGc=' è l'hash sha256
di "https://example.com/example.js".
Gli script valutati tramite eval o new Function possono essere inseriti nella lista consentita includendo eval-<hash-algorithm>-<script-contents-hash> in src dello script. Ad esempio, la seguente intestazione CSP consentirà di inserire nell'allowlist il passaggio della stringa
alert("hello world") a eval():
Content-Security-Policy: script-src 'eval-sha256-4vpsisrBP00v+tF/SsQ3RXWWYF28JSvTpR9D/wrxn/0=';
dove 'eval-sha256-4vpsisrBP00v+tF/SsQ3RXWWYF28JSvTpR9D/wrxn/0=' è l'hash sha256
di alert("hello world").
Per favorire l'adozione, quando un sito partecipa alla prova dell'origine, gli hash per gli URL e eval verranno stampati nella console DevTools e inclusi nei report CSP. Ciò significa che è possibile utilizzare un criterio rigoroso, ma report-only, per enumerare
tutti gli hash necessari per la lista consentita.
Mantenere la compatibilità con le versioni precedenti
Per consentire l'implementazione di questi criteri prima che tutti i browser abbiano aggiunto il supporto, gli hash degli URL possono essere elencati dopo le liste consentite basate sull'host. I browser che comprendono i nuovi tipi di hash ignoreranno le liste consentite basate sull'host precedenti, mentre i browser che non comprendono i nuovi tipi di hash continueranno ad applicare la lista consentita basata sull'host, consentendo ai siti di impostare entrambi, utilizzando le norme più restrittive nei browser che le supportano, senza rischiare interruzioni nei browser che non le supportano, come mostrato nell'esempio seguente.
Content-Security-Policy: script-src 'https:' 'url-sha256-u2cYltM/2wbvoRR0jMZ57KmFdVqqdPYa6GtdykFwBGc='
Abbiamo anche introdotto strict-dynamic-url, un equivalente di strict-dynamic che si applica solo quando vengono impostati gli hash degli URL. Poiché strict-dynamic fa sì che le allowlist basate sull'host vengano ignorate, un sito che vuole inserire in allowlist un hash specifico e a cui applicare strict-dynamic può utilizzare una policy come:
Content-Security-Policy: https: 'strict-dynamic-url' 'url-sha256-u2cYltM/2wbvoRR0jMZ57KmFdVqqdPYa6GtdykFwBGc='
In questo esempio, i browser che non supportano ancora gli hash applicheranno solo
https:. unsafe-eval verrà ignorato in modo simile dai browser supportati quando
sono presenti hash di valutazione. Ad esempio, le seguenti norme verranno valutate come
unsafe-eval. In questo modo, l'utilizzo di eval() è consentito su tutti i browser che non supportano ancora
gli hash eval, mentre è consentito solo l'utilizzo di eval() di alert("hello world")
tra i browser che supportano gli hash eval.
Content-Security-Policy: script-src "unsafe-eval" "'eval-sha256-4vpsisrBP00v+tF/SsQ3RXWWYF28JSvTpR9D/wrxn/0='"
Condividi feedback
Ci interessano i feedback degli sviluppatori su queste estensioni di
script-src. Pubblica eventuali commenti come issue nella spiegazione su
GitHub.