(Remplacé) Expérimentation avec une politique de sécurité de contenu (CSP) 'strict-dynamic'

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 :


:scroll: 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.

:eyes: 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 !

:thinking: 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).

:technologist: 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 !

:recycle: 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.

:writing_hand: 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';

:open_book: Ressources

Documentation MDN sur strict-dynamic

Documentation de Google sur ‘Strict CSP’

Évaluateur CSP

Informations sur la prise en charge des navigateurs par Caniuse

22 « J'aime »

Comme la politique de sécurité du contenu strict-dynamic est facultative à partir de Discourse v3.3.0.beta3, nous avons mis à jour Mitigate XSS Attacks with Content Security Policy et ce sujet sera fermé.

2 « J'aime »