| Résumé | Fournit deux formulaires de publication indépendants et anonymes | |
| Lien vers le dépôt | GitHub - elRicharde/discourse-anonymous-feedback: Anonymous Feedback Formular in Discourse · GitHub | |
| Guide d’installation | Comment installer des plugins dans Discourse |
Ce plugin Discourse propose deux formulaires de publication indépendants et anonymes : « Feedback anonyme » et « Tableau blanc ». Les deux formulaires sont protégés par un « code d’accès » (un mot de passe simple) et permettent aux utilisateurs sans compte d’envoyer un message privé à un groupe d’utilisateurs préconfiguré, même si votre forum nécessite normalement une connexion. Ces deux formulaires, eux, ne le nécessitent pas.
Techniquement, les publications sont soumises via une page web sans nécessiter de connexion et peuvent même être utilisées dans un onglet de navigation privée. Il n’existe aucun moyen de remonter à l’expéditeur, car les adresses IP ne sont pas enregistrées. Ce plugin est conçu pour offrir un canal de communication sécurisé et confidentiel.
Pourquoi utiliser ce plugin ?
Dans de nombreuses communautés, les sujets sensibles ou les idées nécessitent un canal de feedback garantissant l’anonymat et réduisant la pression sociale. Ce plugin répond à plusieurs défis clés :
-
Favoriser un feedback sans retenue : Il offre un espace sûr aux utilisateurs (et même aux non-utilisateurs, si le code d’accès est partagé en externe) pour partager des opinions honnêtes, non filtrées, des préoccupations ou des idées innovantes sans craindre le jugement ou des représailles. Cela peut conduire à des contributions plus franches et précieuses qui seraient autrement retenues.
-
Confidentialité et confiance : En garantissant l’anonymat grâce à des mesures techniques (comme la limitation de débit basée sur HMAC sans journalisation des IP), le plugin renforce la confiance et encourage une participation plus large, en particulier pour des sujets délicats.
-
Combler les lacunes de communication : Il crée un pont de communication accessible pour les individus hésitant à publier publiquement ou ne disposant pas de compte Discourse, élargissant ainsi la portée de l’engagement communautaire.
-
Entrées structurées : En dirigeant le feedback vers un groupe privé spécifique, il garantit que les informations sensibles sont examinées par les membres appropriés de l’équipe, permettant une discussion et des actions ciblées à l’abri des regards publics.
-
Simplicité pour les non-utilisateurs : Le mécanisme du code d’accès permet aux parties externes ou aux visiteurs temporaires de fournir des contributions sans la lourdeur d’une inscription complète à un compte.
En fin de compte, ce plugin améliore l’interaction communautaire en permettant un environnement plus inclusif et sécurisé pour les discussions et suggestions critiques.
Fonctionnement (Vue d’ensemble technique)
Le plugin a été développé avec un accent mis sur l’anonymat et la sécurité.
-
Accès : Un utilisateur se rend sur
/anonymous-feedbackou/white-board. -
Déverrouillage : L’utilisateur doit entrer le bon code d’accès. Le serveur valide ce code.
-
Pour prévenir les attaques par force brute, le serveur utilise un système de limitation de débit basé sur un hachage HMAC de l’adresse IP de l’utilisateur et d’un secret rotatif. L’adresse IP elle-même n’est jamais stockée.
-
Si le code est correct, le serveur définit un indicateur temporaire, utilisable une seule fois, dans la session de l’utilisateur.
-
-
Soumission : L’utilisateur rédige et envoie son message.
-
Création du MP : Le serveur vérifie l’indicateur de session. S’il est valide, il crée un nouveau message privé vers le groupe cible configuré et le publie en tant que l’utilisateur bot configuré (ou utilisateur système). L’indicateur de session est ensuite immédiatement supprimé, de sorte que l’utilisateur doit à nouveau entrer le code d’accès pour tout message ultérieur.
Cas d’utilisation / Flux de travail
Ce plugin a été conçu pour être flexible. Voici deux flux de travail courants que vous pouvez mettre en œuvre :
Cas d’utilisation 1 : Le « Tableau blanc » - Un tableau d’affichage public modéré
Ce cas d’utilisation vise à rendre visibles des sujets sensibles ou des comportements inappropriés observés dans la communauté (par exemple, lors d’événements ou dans les interactions générales). Par exemple, rendre visibles des problèmes tels que le sexisme.
L’objectif : Rendre les problèmes importants visibles pour la communauté sans exposer l’identité de la personne qui les signale. L’accent est mis sur le message, et non sur l’expéditeur, et potentiellement même sur les individus impliqués. Une simple représentation de situations avec des comportements inappropriés, sans nommer les personnes concernées, crée tout de même une visibilité et sensibilise.
Le flux de travail :
-
Soumission : Un utilisateur soumet une publication via le formulaire
/white-board. Ce formulaire est accessible aux membres (MG), aux apprentis (ANW) et aux facilitateurs (FM). Seul l’utilisateur « Anonymous » peut créer des publications. -
Examen privé : La publication arrive sous forme de message privé au
target_groupconfiguré (par exemple, une équipe de modération ou un comité « Trust & Safety »). Elle sera identifiable comme une entrée « Tableau blanc ». -
Vérification : L’équipe examine la soumission par rapport à des critères prédéfinis (par exemple, pas d’attaques personnelles, pas d’insultes, respect des directives communautaires).
-
Publication (si approuvée) : Un administrateur est invité au message et le convertit en un sujet public dans une catégorie publique dédiée « Tableau blanc ». Ce sujet est publié en utilisant un compte générique spécifique (par exemple, un « WhiteBoardBot » ou un utilisateur « Anonymous », configuré via le paramètre
bot_username). Les identifiants de connexion de cet utilisateur peuvent être partagés avec le groupe d’examen. La publication est effectuée par l’utilisateur « Anonymous ». -
Contrôle des discussions : Les permissions de la catégorie « Tableau blanc » sont définies de manière à ce qu’elle soit visible par les membres/apprentis/facilitateurs mais non commentable. Les modérateurs du forum réguliers sont censés ne pas modérer cette zone spécifique ; cela relève uniquement de la responsabilité du
target_groupdésigné. Il reste à savoir si le Tableau blanc devrait contenir des sous-catégories (par exemple, « anonyme fermé » ou des catégories spécifiques pour les publications dutarget_group). -
Gestion des rejets : Comme il n’y a aucun moyen de contacter l’expéditeur anonyme, il est bon de pratiquer de fixer un sujet épinglé dans la catégorie « Tableau blanc » expliquant les critères de publication et les raisons pour lesquelles une soumission pourrait être rejetée. Les règles justifiant la non-publication doivent toujours être rendues publiques à un endroit unique du forum.
Cas d’utilisation 2 : Feedback anonyme - Un canal direct et privé
Ce cas d’utilisation vise à fournir une ligne de communication directe et confidentielle à une équipe spécifique pour tout type de feedback (par exemple, pour des retours sur des votes ou d’autres suggestions anonymes).
L’objectif : Offrir aux membres et aux non-membres un moyen sûr de fournir des retours sur des questions communautaires, des votes ou d’autres sujets directement à la direction ou à un comité pertinent.
Le flux de travail :
-
Soumission : Un utilisateur soumet un feedback via le formulaire
/anonymous-feedback. L’objet peut aider à catégoriser le message. Cette publication arrive avec le préfixe d’objet « Message anonyme - jj.mm.aaaa, hh:mm:ss » dans la boîte de réception collective dutarget_group. -
Livraison privée : Le message arrive sous forme de message privé au
target_group. Il est identifiable comme « Feedback anonyme » par son préfixe d’objet. Letarget_groupdécide ensuite de quoi faire du message. -
Traitement interne : L’équipe peut ensuite discuter du feedback en privé, impliquer d’autres parties prenantes si nécessaire, ou décider d’une ligne de conduite. Ce feedback peut être utilisé pour des retours sur des votes ou d’autres suggestions anonymes.
-
Meilleure pratique pour les feedbacks inappropriés : Si une soumission est inappropriée, l’équipe peut simplement la supprimer. Vous pourriez envisager de publier un avis public générique (par exemple, dans une catégorie « Actualités ») indiquant que « Le feedback reçu le [Date] n’a pas été traité car il violait nos normes communautaires pour une communication respectueuse. » Cela informe l’expéditeur sans révéler de détails et l’encourage à soumettre à nouveau de manière plus constructive. S’il s’agit d’une publication pour le Tableau blanc (identifiable par l’absence de marquage spécial, ou éventuellement un suffixe si utile) : les modérateurs sont invités au message, mais personne ne répond au message. Les modérateurs convertissent le message en un sujet dans la catégorie « Tableau blanc » → visible par les membres/apprentis/facilitateurs et non commentable.
Fonctionnalités
-
Deux points de terminaison indépendants : Fournit
/anonymous-feedbacket/white-board, chacun avec sa propre configuration distincte. -
Protection par code d’accès : Chaque formulaire est protégé par son propre code d’accès secret pour prévenir le spam. Le code d’accès est le même pour tous, et la page peut également être utilisée en mode privé ou sur l’ordinateur des parents.
-
Groupe cible configurable : Les messages de chaque formulaire sont envoyés sous forme de message privé à un groupe d’utilisateurs spécifique et configurable.
-
Session à usage unique : Après l’envoi réussi d’un message, l’utilisateur est redirigé vers l’écran du code d’accès. Il doit entrer à nouveau le code pour envoyer un autre message, ce qui empêche le spam simple par multiples publications. Après l’envoi, vous revenez sur le code d’accès, il n’est pas facile de publier plusieurs fois.
-
Limitation de débit préservant l’anonymat : Protège contre les attaques par force brute et le spam sans journaliser les adresses IP.
-
Protection contre les bots : Contient un champ honeypot caché pour attraper les bots simples.
-
Utilisateur émetteur personnalisé : Vous pouvez définir un utilisateur bot pour chaque formulaire afin que les messages privés semblent être envoyés par cet utilisateur (par exemple, « FeedbackBot »). L’utilisateur doit exister. Si vide, l’utilisateur système est utilisé par défaut.
-
Interface utilisateur propre et moderne : Les formulaires sont basés sur un composant Ember.js réutilisable pour une expérience utilisateur cohérente et épurée.
Installation
Suivez le guide standard pour l’installation des plugins Discourse : Installer un plugin.
-
Ajoutez l’URL du dépôt du plugin à votre fichier
app.yml:hooks: after_code: - exec: cd: $home/plugins cmd: - git clone https://github.com/elRicharde/discourse-anonymous-feedback -
Reconstruisez votre conteneur :
cd /var/discourse && ./launcher rebuild app
Configuration
Après l’installation, vous pouvez configurer le plugin dans les paramètres d’administration de Discourse. Recherchez « anonymous feedback ». Tous les paramètres sont indépendants pour les formulaires « Anonymous Feedback » et « White Board ».
| Paramètre | Description |
|---|---|
anonymous_feedback_enabled |
Active ou désactive la page /anonymous-feedback. |
white_board_enabled |
Active ou désactive la page /white-board. |
... door_code |
Le mot de passe secret que les utilisateurs doivent entrer pour accéder au formulaire de message. |
... target_group |
Le nom du groupe d’utilisateurs qui reçoit les messages privés. Ce groupe doit exister. |
... rate_limit_per_hour |
Une limite globale sur le nombre de messages pouvant être envoyés par heure pour prévenir les abus. Défini sur 0 pour désactiver. |
... max_message_length |
Le nombre maximum de caractères autorisés dans le texte du message. |
... hmac_rotation_hours |
La fréquence à laquelle la clé secrète pour la limitation de débit est rotative. Une durée plus courte réinitialise plus rapidement les verrous de force brute mais est légèrement moins sécurisée. |
... bot_username |
Optionnel. Le nom d’utilisateur de l’utilisateur qui enverra le MP. L’utilisateur doit exister. Si vide, l’utilisateur système est utilisé. |
Développement / Architecture
-
Backend : Un seul contrôleur Ruby on Rails,
AnonymousFeedbackController, traite toutes les requêtes pour les deux points de terminaison. Il utilise une méthodekindqui vérifie le chemin de la requête (/anonymous-feedbackvs/white-board) pour déterminer quelles configurations utiliser. Cela évite la duplication de code. Un helpersettingdynamique simplifie davantage la lecture de la configuration. -
Frontend : L’interface utilisateur est basée sur un seul composant Ember.js réutilisable,
<AnonymousFeedbackForm />.-
Ce composant contient tout le HTML, CSS et la logique Javascript pour l’état du formulaire (déverrouillage, envoi, gestion des erreurs).
-
Les modèles de route (
anonymous-feedback.hbsetwhite-board.hbs) sont maintenant extrêmement simples. Ils instancient simplement ce composant et passent les paramètres corrects (par exemple, titre, URLs API). Cette approche DRY (Don’t Repeat Yourself) rend le code frontend propre et facile à maintenir.
-
Analyse approfondie : Anonymat et limitation de débit (HMAC)
Une fonctionnalité clé de ce plugin est l’équilibre entre l’anonymat absolu et la protection contre les abus (spam).
Le problème : Adresses IP finies
Les adresses IPv4 consistent en un ensemble fini de combinaisons (environ 4,3 milliards).
- Le risque : Les fonctions de hachage (comme SHA256) sont des fonctions à sens unique irréversibles. Cependant, si nous stockions simplement
SHA256(Adresse_IP), un attaquant (ou un administrateur) pourrait pré-calculer les hachages pour toutes les adresses IP existantes (une « table arc-en-ciel ») en quelques secondes. En comparant le hachage stocké avec leur liste, ils pourraient immédiatement révéler l’adresse IP originale.
La solution : HMAC avec un secret rotatif
Nous utilisons HMAC (Hash-Based Message Authentication Code). Cela combine le message (IP) avec une clé secrète cryptographique avant le hachage.
-
Le mécanisme :
Identifiant = HMAC(Adresse_IP + Clé_Secrète) -
Pourquoi cela fonctionne : Même si l’attaquant connaît toutes les adresses IP possibles, il ne connaît pas la
Clé_Secrète. Sans cette clé, il ne peut pas pré-calculer les hachages. L’attaque par « table arc-en-ciel » devient impossible car la variable secrète manque.
Confidentialité future (Rotation des clés)
La Clé_Secrète est rotative automatiquement (par exemple, toutes les 4 heures).
-
Scénario : Imaginez que le serveur soit piraté et que l’attaquant vole la
Clé_Secrèteactuelle et la base de données. -
Protection : Comme la clé change régulièrement et que les anciennes clés sont définitivement jetées, l’attaquant ne peut calculer les hachages IP que pour la fenêtre de temps actuelle (par exemple, les 4 dernières heures). Toutes les activités d’hier ou de la semaine dernière ont été hachées avec des clés qui n’existent plus. Cela garantit la confidentialité future : l’anonymat passé ne peut être compromis, même si le système actuel est compromis.
Rotation rapide vs lente
Vous pouvez configurer l’intervalle de rotation (hmac_rotation_hours).
-
Rotation rapide (par exemple, 1 heure) :
-
Avantages : Anonymat maximal. La fenêtre de temps où des actions distinctes peuvent être liées au même acteur (inconnu) est très courte.
-
Inconvénients : « Perte de mémoire » pour la limitation de débit. Lorsque la clé tourne, le serveur « oublie » qui a déjà envoyé des messages. Un spammeur bloqué à l’heure 1 est effectivement débloqué à l’heure 2.
-
-
Rotation lente (par exemple, 24 heures) :
-
Avantages : Protection plus forte contre le spam, car les blocages persistent plus longtemps.
-
Inconvénients : Dans cette fenêtre de 24 heures, un administrateur peut voir que « l’utilisateur X » a envoyé 5 messages, même s’il ne sait pas qui est « l’utilisateur X » (Lienabilité).
-
Recommandation : Une valeur comprise entre 4 et 12 heures offre un équilibre solide.