Ce guide explique comment utiliser la Politique de Sécurité du Contenu (CSP) pour atténuer les attaques de type Cross-Site Scripting (XSS) dans Discourse. Il couvre les bases de la CSP, sa configuration et les meilleures pratiques.
Niveau d’utilisateur requis : Administrateur
Résumé
La Politique de Sécurité du Contenu (CSP) est une fonctionnalité de sécurité cruciale dans Discourse qui aide à se protéger contre les attaques de type Cross-Site Scripting (XSS) et autres attaques par injection. Ce guide présente les bases de la CSP, son implémentation dans Discourse et la façon de la configurer pour votre site.
Qu’est-ce que la Politique de Sécurité du Contenu ?
La Politique de Sécurité du Contenu est une couche de sécurité supplémentaire qui aide à détecter et à atténuer certains types d’attaques, notamment les attaques de type Cross-Site Scripting (XSS) et les attaques par injection de données. La CSP fonctionne en spécifiant quelles sources de contenu sont considérées comme fiables et en instruisant le navigateur à n’exécuter ou à rendre que les ressources provenant de ces sources fiables.
Le XSS reste l’une des vulnérabilités web les plus courantes. En mettant en œuvre la CSP, Discourse autorise uniquement le chargement et l’exécution de scripts provenant de sources fiables, réduisant ainsi considérablement le risque d’attaques XSS.
Implémentation de la CSP dans Discourse
À partir de la version 3.3.0.beta1 de Discourse, Discourse implémente une CSP de type ‘strict-dynamic’. Cette approche utilise une seule valeur nonce- et le mot-clé strict-dynamic dans la directive script-src. Toutes les balises <script> initiales dans le cœur et les thèmes se voient automatiquement attribuer l’attribut nonce= approprié.
La politique par défaut inclut les directives suivantes :
script-src: Spécifie les sources valides pour les scripts JavaScriptworker-src: Spécifie les sources valides pour les scripts ServiceWorkerobject-src: Bloque l’exécution des plugins (Flash, Java, etc.)base-uri: Restreint les URLs pour les éléments<base>manifest-src: Restreint les URLs pour les manifestes d’applications webframe-ancestors: Contrôle quels sites peuvent intégrer votre instance Discourse dans une iframeupgrade-insecure-requests: Met automatiquement à niveau les requêtes HTTP vers HTTPS (inclus lorsqueforce_httpsest activé)
Configuration de la CSP dans Discourse
Paramètres disponibles
content_security_policy: Active ou désactive la CSP (par défaut : activé)content_security_policy_report_only: Active le mode Rapport-Only de la CSP (par défaut : désactivé)content_security_policy_script_src: Vous permet d’étendre la directivescript-srcpar défautcontent_security_policy_frame_ancestors: Active la directiveframe_ancestors(par défaut : activé)
Comment activer la CSP
- Accédez à votre panneau d’administration
- Allez dans les paramètres de sécurité
- Trouvez le paramètre
content_security_policyet assurez-vous qu’il est activé
Il est recommandé de commencer par le mode Rapport-Only de la CSP pour identifier d’éventuels problèmes avant d’activer complètement la CSP :
- Activez le paramètre
content_security_policy_report_only - Surveillez la console de votre navigateur pour les violations de la CSP
- Résolvez les violations légitimes en étendant la CSP si nécessaire
- Une fois que vous êtes certain qu’il n’y a pas de faux positifs, désactivez le mode Rapport-Only et activez complètement la CSP
Étendre la CSP par défaut
Si vous devez autoriser des sources de scripts supplémentaires, vous pouvez étendre la directive script-src en utilisant le paramètre content_security_policy_script_src. Vous pouvez ajouter :
- Des sources basées sur des hachages
'wasm-unsafe-eval''unsafe-eval'(à utiliser avec prudence)
Par exemple :
'sha256-QFlnYO2Ll+rgFRKkUmtyRublBc7KFNsbzF7BzoCqjgA=' 'unsafe-eval'
Soyez prudent lors de l’ajout de 'unsafe-eval' ou d’autres directives permissives, car elles peuvent réduire l’efficacité de la CSP.
CSP et intégrations tierces
Lors de l’utilisation de services tiers comme Google Tag Manager, Google Analytics ou des services publicitaires, vous devrez peut-être ajuster vos paramètres de CSP. Dans la plupart des cas avec la version 3.3.0.beta1 de Discourse ou ultérieure, les scripts externes devraient fonctionner sans configuration supplémentaire grâce à l’implémentation de la CSP ‘strict-dynamic’.
Si vous rencontrez des problèmes, vous devrez peut-être :
- Identifier les sources de scripts requises en surveillant la console de votre navigateur
- Ajouter les sources nécessaires au paramètre
content_security_policy_script_src - Pour des intégrations complexes comme les services publicitaires qui chargent des ressources externes, vous devrez peut-être activer le rendu inter-domaines (Exemple de PR de discourse-adplugin qui le fait).
Meilleures pratiques
- Commencez par le mode Rapport-Only de la CSP pour identifier d’éventuels problèmes
- Renforcez progressivement votre CSP au fur et à mesure que vous résolvez les violations légitimes
- Passez régulièrement en revue vos paramètres de CSP et ajustez-les si nécessaire
- Soyez prudent lors de l’ajout de directives permissives comme
'unsafe-eval'ou'wasm-unsafe-eval' - Maintenez votre instance Discourse à jour pour bénéficier des dernières améliorations de la CSP
FAQ
Q : Je vois de nombreux rapports de violation de la CSP. Dois-je m’inquiéter ?
R : De nombreuses violations de la CSP sont des faux positifs, souvent causés par des extensions de navigateur ou d’autres scripts sans rapport. Concentrez-vous sur la résolution des violations liées au fonctionnement de votre site.
Q : Puis-je utiliser la CSP avec Google AdSense ou d’autres réseaux publicitaires ?
R : Oui, mais vous devrez peut-être utiliser des paramètres de CSP plus permissifs. Commencez par le mode Rapport-Only et ajustez vos paramètres en fonction des violations signalées.
Q : Comment dépanner les problèmes de CSP ?
R : Utilisez les outils de développement de votre navigateur pour surveiller la console en quête de messages de violation de la CSP. Ils vous aideront à identifier quelles ressources sont bloquées et pourquoi.







