Questa guida spiega come utilizzare la Content Security Policy (CSP) per mitigare gli attacchi di Cross-Site Scripting (XSS) in Discourse. Copre le basi della CSP, la configurazione e le migliori pratiche.
Livello utente richiesto: Amministratore
Riepilogo
La Content Security Policy (CSP) è una funzionalità di sicurezza fondamentale in Discourse che aiuta a proteggere contro gli attacchi di Cross-Site Scripting (XSS) e altre iniezioni. Questa guida copre le basi della CSP, come viene implementata in Discourse e come configurarla per il tuo sito.
Cosâè la Content Security Policy?
La Content Security Policy è un ulteriore livello di sicurezza che aiuta a rilevare e mitigare determinati tipi di attacchi, inclusi gli attacchi di Cross-Site Scripting (XSS) e di iniezione di dati. La CSP funziona specificando quali origini di contenuto sono considerate attendibili e istruendo il browser a eseguire o rendere solo le risorse provenienti da tali origini attendibili.
LâXSS rimane una delle vulnerabilitĂ web piĂš comuni. Implementando la CSP, Discourse consente il caricamento e lâesecuzione di script solo da fonti attendibili, riducendo significativamente il rischio di attacchi XSS.
Implementazione della CSP in Discourse
A partire dalla versione 3.3.0.beta1 di Discourse, lâimplementazione della CSP utilizza la modalitĂ âstrict-dynamicâ. Questo approccio impiega un singolo valore nonce- e la parola chiave strict-dynamic nella direttiva script-src. Tutti i tag \u003cscript\u003e iniziali nel core e nei temi ricevono automaticamente lâattributo nonce= appropriato.
La policy predefinita include le seguenti direttive:
script-src: Specifica le origini valide per gli script JavaScriptworker-src: Specifica le origini valide per gli script ServiceWorkerobject-src: Blocca lâesecuzione di plugin (Flash, Java, ecc.)base-uri: Restringe gli URL per gli elementi\u003cbase\u003emanifest-src: Restringe gli URL per i manifest delle app webframe-ancestors: Controlla quali siti possono incorporare la tua istanza di Discourse in un iframeupgrade-insecure-requests: Aggiorna automaticamente le richieste HTTP a HTTPS (incluso quandoforce_httpsè abilitato)
Configurazione della CSP in Discourse
Impostazioni disponibili
content_security_policy: Abilita o disabilita la CSP (predefinito: on)content_security_policy_report_only: Abilita la modalitĂ Report-Only della CSP (predefinito: off)content_security_policy_script_src: Consente di estendere la direttivascript-srcpredefinitacontent_security_policy_frame_ancestors: Abilita la direttivaframe_ancestors(predefinito: on)
Come abilitare la CSP
- Vai al pannello di Amministrazione
- Accedi alle impostazioni di Sicurezza
- Trova lâimpostazione
content_security_policye assicurati che sia abilitata
Si consiglia di iniziare con la modalitĂ Report-Only della CSP per identificare eventuali problemi prima di abilitare completamente la CSP:
- Abilita lâimpostazione
content_security_policy_report_only - Monitora la console del browser per le violazioni della CSP
- Risolvi eventuali violazioni legittime estendendo la CSP come necessario
- Una volta sicuro che non ci siano falsi positivi, disabilita la modalitĂ Report-Only e abilita completamente la CSP
Estendere la CSP predefinita
Se è necessario consentire origini script aggiuntive, è possibile estendere la direttiva script-src utilizzando lâimpostazione content_security_policy_script_src. Ă possibile aggiungere:
- Hash delle origini
'wasm-unsafe-eval''unsafe-eval'(usare con cautela)
Ad esempio:
'sha256-QFlnYO2Ll+rgFRKkUmtyRublBc7KFNsbzF7BzoCqjgA=' 'unsafe-eval'
Fai attenzione quando aggiungi 'unsafe-eval' o altre direttive permissive, poichĂŠ possono ridurre lâefficacia della CSP.
CSP e integrazioni di terze parti
Quando si utilizzano servizi di terze parti come Google Tag Manager, Google Analytics o servizi pubblicitari, potrebbe essere necessario regolare le impostazioni della CSP. Nella maggior parte dei casi con Discourse versione 3.3.0.beta1 o successive, gli script esterni dovrebbero funzionare senza configurazioni aggiuntive grazie allâimplementazione della CSP âstrict-dynamicâ.
Se si verificano problemi, potrebbe essere necessario:
- Identificare le origini script richieste monitorando la console del browser
- Aggiungere le origini necessarie allâimpostazione
content_security_policy_script_src - Per integrazioni complesse come i servizi pubblicitari che caricano risorse esterne, potrebbe essere necessario abilitare il rendering cross-domain (Esempio di PR da discourse-adplugin che lo fa).
Migliori pratiche
- Inizia con la modalitĂ Report-Only della CSP per identificare potenziali problemi
- Stringi gradualmente la CSP man mano che risolvi le violazioni legittime
- Rivedi regolarmente le impostazioni della CSP e adattale secondo necessitĂ
- Fai attenzione quando aggiungi direttive permissive come
'unsafe-eval'o'wasm-unsafe-eval' - Mantieni aggiornata la tua istanza di Discourse per beneficiare dei miglioramenti piĂš recenti della CSP
Domande frequenti
D: Ricevo molti rapporti di violazione della CSP. Dovrei preoccuparmi?
R: Molte violazioni della CSP sono falsi positivi, spesso causati da estensioni del browser o altri script non correlati. Concentrati sulla risoluzione delle violazioni relative alla funzionalitĂ del tuo sito.
D: Posso utilizzare la CSP con Google AdSense o altre reti pubblicitarie?
R: SĂŹ, ma potrebbe essere necessario utilizzare impostazioni della CSP piĂš permissive. Inizia con la modalitĂ Report-Only e regola le impostazioni in base alle violazioni riportate.
D: Come risolvo i problemi relativi alla CSP?
R: Utilizza gli strumenti per sviluppatori del browser per monitorare la console per i messaggi di violazione della CSP. Questi ti aiuteranno a identificare quali risorse vengono bloccate e perchĂŠ.







