Una Content Security Policy indica al browser quali sorgenti di contenuto sono autorizzate. È particolarmente utile per limitare l’impatto di alcune injection di script e impedire caricamenti da origini inattese.
Una CSP è una lista di autorizzazioni
Direttive come default-src, script-src, style-src, img-src, connect-src e frame-ancestors coprono famiglie diverse di risorse. Una policy efficace deve riflettere i bisogni reali dell’applicazione invece di accumulare domini “per sicurezza”.
Un generatore CSP può produrre una base leggibile, ma va considerato un punto di partenza da testare, non una garanzia automatica.
Procedere gradualmente
Applicare subito una policy estremamente restrittiva su un sito esistente può rompere analytics, widget, font, immagini o chiamate API. È più prudente inventariare le risorse, costruire una policy minima, testare le pagine importanti e restringere progressivamente le regole.
Evita di risolvere ogni errore aggiungendo wildcard molto ampie. Ogni eccezione dovrebbe corrispondere a un’esigenza compresa.
Nonce, hash e script inline
Gli script inline sono un punto delicato. Nonce e hash permettono di autorizzare contenuti specifici senza aprire globalmente unsafe-inline. La scelta dipende da come l’applicazione genera le pagine.
Anche unsafe-eval merita attenzione: autorizza forme di valutazione dinamica del codice e dovrebbe essere usato solo quando la necessità è chiara e non eliminabile con una configurazione diversa.
frame-ancestors e iframe
La direttiva frame-ancestors controlla quali origini possono integrare la pagina in un iframe. È utile contro alcune forme di clickjacking e completa gli altri header di sicurezza.
Comprendere il fallback delle direttive
default-src agisce come regola di fallback per diverse categorie quando non esiste una direttiva più precisa. Se aggiungi script-src, per gli script valgono le regole specifiche di script-src.
Una policy tipica distingue almeno script, stili, immagini, connessioni e frame. A seconda del sito possono essere utili anche font-src, media-src, worker-src, object-src, base-uri o form-action. L’obiettivo non è usare ogni direttiva possibile, ma descrivere con precisione il comportamento atteso.