Una CSP è fatta di direttive come default-src, script-src, img-src o frame-ancestors. Tutto ciò che non è permesso viene bloccato dal browser e segnalato in console. Così l'impatto del cross-site scripting si riduce molto.
Con Content-Security-Policy-Report-Only puoi provare una policy senza bloccare nulla e vedere prima quali servizi incorporati (analytics, font, mappe) mancano ancora.
In pratica gli header CSP spesso si scontrano tra applicazione e reverse proxy: Nextcloud invia la propria CSP e un header aggiunto nel proxy fa sì che valgano due policy, da rispettare entrambe. Le pagine restano vuote o i viewer non si caricano.
Esempio
Content-Security-Policy: default-src 'self'; img-src 'self' data:; frame-ancestors 'none'