← Tutti i controlli
SicurezzaGravità tipica: Medio

Scanner della CSP debole

Rileva direttive non sicure come 'unsafe-inline' o 'unsafe-eval' che indeboliscono la protezione XSS della tua CSP.

Cosa controlla

Questo scanner analizza la tua Content-Security-Policy in cerca di direttive non sicure come unsafe-inline o unsafe-eval. Queste opzioni allentano così tanto la policy da smettere di proteggerti in modo efficace. Lo scanner esamina solo come è definita la CSP, non la riscrive.

Perché è importante

Una CSP con queste direttive ferma a malapena gli attacchi di iniezione di script (XSS) che dovrebbe bloccare. Dà un falso senso di sicurezza: sembra che tu sia protetto, ma la protezione è vuota. Un attaccante che inietta codice può eseguirlo senza problemi.

Come risolverlo

Rimuovi unsafe-inline e unsafe-eval dalla tua policy e sostituiscili con un approccio basato su nonce o hash per gli script di cui hai davvero bisogno. Parti da una policy rigida e consenti solo l'essenziale. Testa le modifiche con attenzione, perché una CSP mal configurata può rompere funzionalità legittime.

Come funziona questo controllo

Questo controllo agisce solo se il tuo sito invia già un header Content-Security-Policy; se non lo invia, è lo scanner degli header a segnalarlo. Scanaris legge la policy completa e cerca le due parole che la svuotano: 'unsafe-inline', che permette di eseguire qualsiasi script o stile scritto direttamente nell'HTML, e 'unsafe-eval', che permette di trasformare testo in codice con eval e simili. Se ne compare una, apre un riscontro di severità bassa con la lista delle debolezze trovate. È bassa perché avere una CSP imperfetta è comunque meglio che non averla, ma la protezione contro l'iniezione di script, che è la ragione d'essere della CSP, resta quasi annullata.

Perché conta

Una CSP rigorosa fa sì che, anche se un attaccante riesce a infilare uno <script> nella tua pagina (tramite un commento non sanificato, un parametro riflesso o una libreria compromessa), il browser si rifiuti di eseguirlo. Con 'unsafe-inline' in script-src, quello script iniettato si esegue lo stesso: l'header c'è, il lucchetto sembra chiuso, ma la porta è aperta. Dove sta la parola conta: in script-src è grave; in style-src è un rischio molto minore che molti siti accettano per i loro stili inline.

Come sistemarlo

1. Nonce per gli script inline

Un nonce è un valore casuale diverso a ogni richiesta che metti nell'header e in ogni tag <script> legittimo. Il browser esegue solo gli script che portano quel valore; uno script iniettato non lo conosce.

Content-Security-Policy: script-src 'nonce-R4nd0m' 'strict-dynamic'; object-src 'none'; base-uri 'self'

Next.js lo fa nel middleware, generando il nonce e passandolo all'header e ai componenti; Nuxt, con un plugin server che lo inietta in ogni risposta (è ciò che fa Scanaris); Express, con un middleware che lo salva in res.locals e lo stampa nei template.

2. Hash per gli script fissi

Se uno script inline non cambia mai, calcola il suo hash SHA-256 e mettilo nella policy: 'sha256-…'. Funziona per frammenti piccoli, come quello di un tag manager, senza montare i nonce.

3. Spostare il codice in file

I gestori onclick="…" e i blocchi di script nell'HTML sono la causa abituale del bisogno di 'unsafe-inline'. Spostali in file .js serviti dal tuo dominio e il bisogno sparisce.

4. Togliere unsafe-eval

Di solito lo richiede una libreria vecchia o una modalità di sviluppo di un framework finita in produzione. Controlla nella console del browser cosa lo richiede e aggiorna o sostituisci quel pezzo.

5. Pubblicare in modalità report

Pubblica prima la nuova policy come Content-Security-Policy-Report-Only con una direttiva report-to o report-uri verso un tuo endpoint. Per qualche giorno raccogli cosa bloccherebbe, aggiusta, e quando i report sono puliti passala all'header che blocca.

Verifica che sia sistemato

curl -sI https://tuodominio.com | grep -i "content-security-policy"

In script-src non devono comparire né 'unsafe-inline' né 'unsafe-eval'. Poi naviga sul tuo sito con la console aperta: qualsiasi blocco compare lì con la direttiva che l'ha causato. La teoria completa è in header di sicurezza HTTP spiegati per umani.

Domande frequenti

Uso Tailwind o stili inline. Devo togliere unsafe-inline da style-src?

È auspicabile ma non urgente. Gli stili inline non eseguono codice. Dai priorità a script-src; una policy con 'unsafe-inline' solo in style-src protegge da ciò che conta.

Google Tag Manager o una chat di supporto mi obbligano ad allentare la policy.

Quasi tutti hanno documentazione CSP: accettano un nonce o pubblicano gli hash e i domini di cui hanno bisogno. Aggiungi le loro origini a script-src e connect-src invece di aprire tutto.

La CSP mi romperà il sito?

Solo se la passi a bloccare senza provare. Per questo esiste la modalità report: ti mostra cosa romperebbe senza romperlo.

Verificalo sul tuo sito

Scansiona il tuo sito gratis e scopri se questo e altri 44 controlli passano, con un prompt di fix per ogni problema.

Scansiona il mio sito gratis

Dal blog

Controlli correlati