Nous expérimentons une nouvelle politique de sécurité de contenu (CSP) 'strict-dynamic', qui devrait faciliter l’intégration sécurisée des thèmes, plugins et scripts externes avec Discourse.
Vous pouvez essayer le nouveau mode en activant le paramètre du site « politique de sécurité de contenu strict dynamic ». N’hésitez pas à nous faire part de vos commentaires !
Nous espérons en faire la valeur par défaut dans un avenir proche et publierons un sujet Announcements à l’approche de cet objectif.
Pour plus d’informations, voir ci-dessous :
Contexte
En 2018, nous avons introduit une politique de sécurité de contenu par défaut pour Discourse. À l’époque, notre politique de prise en charge des navigateurs nous limitait à l’utilisation de valeurs 'host-source' (c’est-à-dire la liste des préfixes d’URL pour chaque script autorisé).
En 2024, il existe plus d’options : le mot-clé 'strict-dynamic'. Cela élimine la nécessité de lister toutes les URL de script à l’avance. Au lieu de cela, tout script initialement approuvé (via une valeur ‘hash’ ou ‘nonce’) est autorisé à charger d’autres scripts avec des restrictions minimales.
Comment essayer ce nouveau mode ?
Activez le paramètre « politique de sécurité de contenu strict dynamic » dans votre panneau d’administration.
Si vous ne voyez pas le paramètre, assurez-vous d’exécuter la dernière version de Discourse. La nouvelle fonctionnalité a été fusionnée le 16 février (lors du cycle 3.3.0.beta1-dev).
Si vous êtes sur notre hébergement et souhaitez accélérer la mise à jour, faites-le nous savoir !
Que se passe-t-il lorsque j’active le nouveau paramètre ?
La directive script-src de Content-Security-Policy sera mise à jour pour inclure une seule valeur nonce- et le mot-clé 'strict-dynamic'.
Toutes les balises <script> initiales du cœur et des thèmes recevront automatiquement l’attribut nonce= approprié. Aucun travail supplémentaire de la part des administrateurs ou des développeurs de thèmes n’est requis.
Les plugins qui injectent leurs propres balises <script> personnalisées devront être mis à jour pour prendre en charge ce nouveau mode (par exemple). Nous travaillons à la collecte de données sur l’étendue de ce problème et fournirons des conseils aux développeurs si nécessaire.
Toutes les valeurs host-source fournies par les thèmes ou les plugins seront automatiquement ignorées (les navigateurs ne prennent pas en charge host-source avec strict-dynamic).
Qu’en est-il des scripts externes comme GTM, l’analytique, la publicité, etc. ?
Ils devraient fonctionner « sans problème », sans configuration supplémentaire requise. Faites-nous savoir si vous rencontrez des problèmes !
Est-ce réversible ?
Oui ! Pendant que nous menons l’expérience, vous pouvez activer et désactiver le paramètre et le changement prendra effet immédiatement.
Exemples de politiques
Exemple de politique Discourse avant ce changement :
upgrade-insecure-requests;
base-uri 'self';
object-src 'none';
script-src https://meta.discourse.org/logs/ https://meta.discourse.org/sidekiq/ https://meta.discourse.org/mini-profiler-resources/ https://d11a6trkgmumsb.cloudfront.net/assets/ https://meta.discourse.org/extra-locales/ https://d3bpeqsaub0i6y.cloudfront.net/highlight-js/ https://d3bpeqsaub0i6y.cloudfront.net/javascripts/ https://d3bpeqsaub0i6y.cloudfront.net/plugins/ https://d3bpeqsaub0i6y.cloudfront.net/theme-javascripts/ https://d3bpeqsaub0i6y.cloudfront.net/svg-sprite/ 'sha256-8uAKDaK4QxxCeYZl0Wxad2Nnj2tgKyA14hYBh66pnn0=' 'sha256-QFlnYO2Ll+rgFRKkUmtyRublBc7KFNsbzF7BzoCqjgA=';
worker-src 'self' https://d11a6trkgmumsb.cloudfront.net/assets/ https://d3bpeqsaub0i6y.cloudfront.net/javascripts/ https://d3bpeqsaub0i6y.cloudfront.net/plugins/;
frame-ancestors 'self';
manifest-src 'self';
Exemple de politique Discourse après ce changement :
upgrade-insecure-requests;
base-uri 'self';
object-src 'none';
script-src 'nonce-78uQrKOCg78iGuMAwCq2lI9E7' 'strict-dynamic';
frame-ancestors 'self';
manifest-src 'self';
Ressources
Documentation MDN sur strict-dynamic
Documentation de Google sur ‘Strict CSP’
Informations sur la prise en charge des navigateurs par Caniuse