Consentement aux cookies, RGPD et Discourse

:books: Ce guide explique le fonctionnement des aspects techniques du RGPD et du consentement aux cookies dans Discourse, ainsi que les options de gestion du consentement aux cookies et des services de gestion de contenu.

:warning: Ce document n’est pas un guide exhaustif couvrant tous les détails impliqués par le RGPD. Discourse ne souhaite pas que ce guide soit utilisé comme conseil juridique à l’intention de ses utilisateurs ou clients. Discourse ne peut pas déterminer la conformité légale au RGPD ou à toute autre loi sur le consentement aux cookies pour votre situation ou cas d’utilisation spécifique.

:spiral_notepad: Discourse utilise désormais une stratégie CSP « Strict Dynamic », il n’est donc plus nécessaire (ni possible) d’ajouter des URL individuelles au paramètre de site Content security policy script src. Pour plus de détails, veuillez consulter Content-Security-Policy now uses 'strict-dynamic'.

Les cookies dans Discourse

Pour comprendre comment Discourse utilise les cookies, consultez la section cookies de notre avis de confidentialité.

Cookies essentiels

Par défaut, Discourse ne définit que les cookies nécessaires à son fonctionnement de base, qui consiste à permettre aux utilisateurs de communiquer entre eux et avec le monde en publiant du contenu sur Internet.

Cookies tiers

Par défaut, Discourse n’utilise pas de cookies pour l’analyse, ni aucun cookie de ciblage publicitaire ou inter-sites. Cependant, les administrateurs du site peuvent choisir d’ajouter d’autres cookies à leur site Discourse (par exemple, Google Analytics, réseaux publicitaires, pixels de suivi, etc.).

Si des scripts tiers sont ajoutés à Discourse et qu’ils introduisent des cookies, il incombe à l’équipe administrative du site de trouver une solution de gestion des cookies conforme au RGPD, ou de traiter les cookies pouvant nécessiter un consentement au titre du RGPD.

Bannières de consentement aux cookies

Si vous souhaitez intégrer une bannière de consentement aux cookies dans votre instance Discourse, vous pouvez suivre les guides que nous avons élaborés pour certains des plus populaires ci-dessous.

:loudspeaker: Le fait de référencer un script JS tiers sur votre site donne essentiellement à ce tiers un accès d’administrateur complet au site, ce qui présente un risque de sécurité potentiel.

:warning: Si vous prévoyez d’utiliser l’une de ces méthodes pour gérer le consentement aux cookies, vous devrez déterminer si elles fonctionnent d’une manière qui répond à vos besoins et aux exigences légales de votre site.

Osano

Rendez-vous sur Plans & Pricing | Osano, choisissez un forfait et créez un compte.

Après avoir créé le compte, vous recevrez un e-mail contenant des identifiants temporaires. Connectez-vous avec ces identifiants, puis vous serez invité à définir un nouveau mot de passe.

Vous serez redirigé vers le tableau de bord Osano. Cliquez sur Gestion du consentement et ajoutez une nouvelle configuration de consentement.

Remplissez un nom pour le gestionnaire, l’URL du site que vous souhaitez suivre et l’URL de la politique de confidentialité de votre site. Par défaut, la politique de confidentialité de Discourse se trouve sur la page Confidentialité à l’adresse https://<votre-site>/privacy.

Après avoir cliqué sur Créer la configuration, une fenêtre contextuelle affichera le code de la bannière. Vous pouvez l’ajouter maintenant à Discourse ou attendre plus tard. La bannière ne sera pas affichée aux utilisateurs tant que vous ne l’aurez pas publiée depuis le tableau de bord Osano.

Vous pouvez ajouter le script à Discourse via un composant de thème ou en modifiant directement votre thème.

Pour ajouter la bannière à Discourse, accédez au tableau de bord administrateur, Personnaliser → Thèmes → Composants et cliquez sur Installer.

Cliquez sur Ajouter CSS/HTML et ajoutez le code dans la section En-tête.

Si le code a été ajouté avec succès à votre forum, vous verrez que l’état de votre gestionnaire indique maintenant En direct mais Votre script n'est pas encore actif. Le gestionnaire est également en Mode Découverte/Écoute, ce qui est bon pour l’instant. Tant que le gestionnaire est dans ce mode, la bannière ne sera pas affichée sur votre site.

Retournez au tableau de bord Osano. Dans les sections suivantes, vous pouvez personnaliser les aspects de votre bannière de consentement. En cliquant sur la carte, vous pouvez voir comment la bannière sera affichée dans différents pays.

Osano détecte automatiquement le pays depuis lequel un utilisateur visite le site et ajuste l’apparence de la bannière en fonction des lois régionales sur la confidentialité.

Par exemple, depuis le Venezuela, la bannière de cookies est simple et disparaît automatiquement après un certain délai :

Mais depuis les Pays-Bas, un pays de l’UE, la bannière propose plus d’options.

Il existe également une option pour ajouter un widget de cookies affichant plus de détails sur les cookies.

Une fois vos personnalisations prêtes, cliquez sur Enregistrer les modifications, puis sur Publier et enfin sur Effacer et publier.

Accédez à la section Scripts et classez tout script détecté sur votre site. Par exemple, sur mon site Discourse, seules des URL CDN ont été détectées, qui sont classées comme Essentielles. Tout autre service tiers que vous pourriez exécuter sur votre site doit être classé en conséquence.

La même règle s’applique à tout cookie détecté. Par exemple, si vous avez Google Analytics sur votre site, il détectera les cookies _ga, qui doivent être classés comme Analyse.

Il peut falloir un certain temps à Osano pour détecter les cookies et les scripts en cours d’exécution sur votre site. Vous devrez peut-être également naviguer dans les différentes sections de votre forum pour vous assurer que l’extrait Osano est exécuté partout.

Les cookies et scripts détectés peuvent changer au fil du temps. Vous recevrez une notification par e-mail d’Osano vous demandant de mettre à jour votre classification comme suit : La configuration 'Test de cookies' exécute des scripts, iframes et/ou cookies non classés.

Une fois la classification prête, passez le mode en Permissif (recommandé) ou Strict, et publiez la configuration. La bannière sera maintenant visible pour vos utilisateurs :tada:

image

En savoir plus sur les modes de configuration des cookies ici : compliance-modes-listener-permissive-strict | Customer Portal

Puisque Osano utilise des web workers, nous devons également ajouter blob: à la directive worker-src. Cela doit être fait via un thème personnalisé ou un composant ; veuillez vous référer à la section « Étendre la CSP par défaut » sur Mitigate XSS Attacks with Content Security Policy.

En résumé, vous devez créer un composant de thème vide avec les paramètres suivants dans le fichier settings.yml :

# settings.yml
extend_content_security_policy:
  type: list
  default: "worker_src: blob:"

:loudspeaker: Si votre bannière n’est pas affichée, veuillez vous référer à la section Débogage CSP.

One Trust

Rendez-vous sur Cookie Consent | Products | OneTrust. Vous pouvez vous inscrire gratuitement pour votre premier domaine ou commencer un abonnement payant depuis la page des tarifs.

Vous recevrez un e-mail de bienvenue de OneTrust contenant un lien pour vous connecter à la plateforme, qui vous guidera dans la configuration de votre compte.

Vous serez redirigé vers https://app.onetrust.com/welcome. Dans les sections Applications disponibles ou Mes applications, choisissez Conformité aux cookies.

Sélectionnez Ajouter un site web.

Ajoutez l’URL de votre site web.

Lancez l’analyse, puis sélectionnez votre(s) public(s) : les cadres de confidentialité avec lesquels vous devez être conforme (comme le RGPD).

Dans les sections suivantes, vous pouvez personnaliser les aspects de votre bannière et ajouter votre propre identité visuelle. Enregistrez vos modifications et publiez-les une fois prêt.

Pour ajouter la bannière à Discourse, accédez à la section Intégration dans le menu latéral et sélectionnez votre site dans la liste.

Copiez le script Production CDN depuis Scripts de production.

Vous pouvez ajouter le script à Discourse via un composant de thème ou en modifiant directement votre thème.

Accédez au tableau de bord administrateur, Personnaliser → Thèmes → Composants et cliquez sur Installer.

Cliquez sur Ajouter CSS/HTML et ajoutez le code que vous avez copié dans la section En-tête.

Et c’est tout ! La bannière devrait ressembler à ceci :

:loudspeaker: Si votre bannière n’est pas affichée, veuillez vous référer à la section Débogage CSP.

ConsentManager

Rendez-vous sur Free test now! - ConsentManager GDPR solution et créez un compte. Suivez l’assistant pour configurer le gestionnaire de consentement.

À l’étape 4, avant de cliquer sur le bouton Continuer, faites défiler la page vers le bas. Sous la section « Choisissez votre système », vous verrez une section intitulée « Configuration par copier-coller ». Choisissez l’onglet Blocage semi-automatique et copiez le code de cette section.

Vous pouvez ajouter le script à Discourse via un composant de thème ou en modifiant directement votre thème.

Accédez au tableau de bord administrateur, Personnaliser → Thèmes → Composants et cliquez sur Installer.

Cliquez sur Ajouter CSS/HTML et ajoutez le code que vous avez copié dans la section Corps.

Et c’est tout ! La bannière devrait ressembler à ceci :

:loudspeaker: Si votre bannière n’est pas affichée, veuillez vous référer à la section Débogage CSP.

Composant de thème Bannière de consentement aux cookies

Ce composant de thème vous permet d’ajouter une bannière de consentement aux cookies personnalisable à votre forum. Il offre simplement un moyen simple aux administrateurs Discourse d’utiliser la bannière de consentement aux cookies open source d’Insites.

Pour les instructions d’installation des composants de thème Discourse, voir : Installing a theme or theme component

Débogage CSP

Si votre bannière de consentement aux cookies ne s’affiche pas :

  1. Vérifiez les erreurs de la console du navigateur : Recherchez toute erreur liée à la CSP dans la console de votre navigateur.
  2. Vérifiez la méthode de chargement du script : Assurez-vous que votre script de consentement aux cookies est chargé correctement :
    • Les scripts ajoutés aux en-têtes de thème sont automatiquement approuvés.
    • Les scripts chargés dynamiquement via loadScript() ou les éléments de script créés programmatiquement fonctionneront avec strict-dynamic.
    • Évitez les scripts « insérés par l’analyseur » (injection directe de HTML avec des balises script).
  3. Configurations spéciales : Certains gestionnaires de consentement peuvent nécessiter des configurations spéciales ou avoir des exigences spécifiques pour fonctionner avec la CSP. Consultez leur documentation pour la compatibilité CSP.
  4. unsafe-eval : Si votre script de consentement aux cookies nécessite unsafe-eval, vous pouvez toujours l’ajouter au paramètre content security script src (avec des guillemets : 'unsafe-eval').

:warning: Soyez prudent lors de l’ajout de 'unsafe-eval' ou d’autres directives permissives, car elles peuvent réduire l’efficacité de la CSP.

Si vous rencontrez toujours des problèmes après ces étapes, vous devrez peut-être vérifier si votre fournisseur de consentement aux cookies est compatible avec les implémentations CSP modernes ou contacter leur support pour obtenir de l’aide.

Autres options de services de gestion de contenu

Outre les options mentionnées ci-dessus pour la gestion des cookies, d’autres options de services de gestion de consentement pouvant fonctionner avec Discourse incluent :

Politique de confidentialité

Ce guide explique comment ajouter la politique de confidentialité de différents fournisseurs à la page /privacy sur Discourse.

One Trust

Note : Vous pouvez consulter les étapes pour configurer un compte OneTrust et créer un composant de thème dans la section ci-dessus.

  • Activez le support SPA sur votre compte OneTrust en suivant les instructions décrites ici.

  • Ajoutez les deux blocs de code suivants l’un sous l’autre dans la section En-tête du composant de thème.

  • Note : Les deux fonctions clearDup et reloadOTBanner sont extraites de cette page. Assurez-vous de les utiliser. La version de ces fonctions dans le code ci-dessous n’est qu’un exemple et peut être obsolète au moment de la lecture.

      <script type="text/x-handlebars" data-template-name="/connectors/below-static/add-cookie-policy">
          <div id="ot-sdk-cookie-policy"></div>
      </script>
    

      <script type="text/discourse-plugin" version="0.10.0">
          // DOIT ÊTRE UTILISÉ UNIQUEMENT SUR LA POLITIQUE DE CONFIDENTIALITÉ. DÉCLENCHEZ LA FONCTION CI-DESSOUS POUR SUPPRIMER LES CATÉGORIES EN DOUBLE
          // script extrait de : https://my.onetrust.com/s/article/UUID-69162cb7-c4a2-ac70-39a1-ca69c9340046?language=en_US#UUID-69162cb7-c4a2-ac70-39a1-ca69c9340046_section-idm45403310539216
      
          function reloadOTBanner() {
      
              var otConsentSdk = document.getElementById("onetrust-consent-sdk");
              if (otConsentSdk) {
                  otConsentSdk.remove();
              }
      
              if (window.OneTrust != null) {
                  OneTrust.Init();
      
                  setTimeout(function() {
                      OneTrust.LoadBanner();
      
                      var toggleDisplay = document.getElementsByClassName(
                          "ot-sdk-show-settings"
                      );
      
                      for (var i = 0; i < toggleDisplay.length; i++) {
                          toggleDisplay[i].onclick = function(event) {
                              event.stopImmediatePropagation();
                              window.OneTrust.ToggleInfoDisplay();
                          };
                      }
                  }, 1000);
              }
          }
          function clearDup() {
              var sec = document.getElementById("ot-sdk-cookie-policy")
              var tally = [];
              for (var i = sec.length - 1; i >= 0; i--) {
                  if (tally[sec[i].firstChild.innerText] === undefined) {
                      tally[sec[i].firstChild.innerText] = 1;
                  } else {
                      //console.log(i,sec[i].firstChild.innerText);
                      sec[i].remove();
                      //return true;
                  }
              }
              //return false;
          }
          api.onAppEvent("page:changed", (data) => {
              if(data.currentRouteName == 'privacy') {
                  reloadOTBanner();
                  clearDup();
              }
          })
      </script>
    

Notes

  • Si vous consultez la console du navigateur, vous pourriez constater que la fonction OptanonWrapper est absente du fichier où vous avez ajouté votre consentement aux cookies ou tout code associé, mais ce n’est pas le cas. Discourse ne supprime pas le bloc de code contenant la fonction OptanonWrapper, il le convertit plutôt dans son propre fichier. Vous pouvez essayer d’appeler cette fonction dans la console JS de votre navigateur pour confirmer que la fonction existe bien.
17 « J'aime »

Pour les utilisateurs de Cloudflare

https://community.cloudflare.com/t/how-to-create-custom-consent-modal-and-customise-it-using-zaraz-consent-api/699318