Protection contre le spam #137

Open
opened 2023-06-15 09:45:29 +02:00 by Darks · 9 comments
Owner

État actuel de la v5

Pour réduire la quantité de spam, la v5 comporte plusieurs mécanismes de protection :

  1. Modération à priori
    1. Token CSRF
    2. Champ antibot (si non-vide à la soumission, alors c'est un bot)
  2. Modération à postériori
    1. Signalement des nouveaux messages dans la shoutbox (#131)
    2. Journalisation des évènements de création/édition coté administration (#136)
    3. Boutons de modération pour chaque contenu

Et c'est à peu près tout pour le moment. Notez qu'on a pas de protection sur le formulaire de création de compte, si ce n'est la journalisation.

Retours de la v43

Dernièrement le spam de la v43 se fait majoritairement via des bots inscrits, et par édition à retardement de messages.

L'antispam du formulaire invité semble être relativement efficace.

Pistes envisageables

À l'usage, il est probable que l'on souhaite plus de protection à priori, et d'autres éléments de détection à postériori. Quelques pistes envisageables :

  • En Javascript, compter le temps de remplissage du formulaire
  • Système de captcha fait-maison
  • Validation des messages invité par un modérateur
  • Alertes en cas de règles à définir (modification d'un message par un compte avec peu de points, ou comportant un lien, etc)
  • Signalement des éditions de messages dans la shoutbox
  • Autre ?

L'objectif de ce ticket est de discuter des différentes options, et d'ouvrir des tickets pour celles retenues.

### État actuel de la v5 Pour réduire la quantité de spam, la v5 comporte plusieurs mécanismes de protection : 1. Modération à priori 1. Token CSRF 1. Champ antibot (si non-vide à la soumission, alors c'est un bot) 1. Modération à postériori 1. Signalement des nouveaux messages dans la shoutbox (#131) 1. Journalisation des évènements de création/édition coté administration (#136) 1. Boutons de modération pour chaque contenu Et c'est à peu près tout pour le moment. Notez qu'on a pas de protection sur le formulaire de création de compte, si ce n'est la journalisation. ### Retours de la v43 Dernièrement le spam de la v43 se fait majoritairement via des bots inscrits, et par édition à retardement de messages. L'antispam du formulaire invité semble être relativement efficace. ### Pistes envisageables À l'usage, il est probable que l'on souhaite plus de protection à priori, et d'autres éléments de détection à postériori. Quelques pistes envisageables : - En Javascript, compter le temps de remplissage du formulaire - Système de captcha fait-maison - Validation des messages invité par un modérateur - Alertes en cas de règles à définir (modification d'un message par un compte avec peu de points, ou comportant un lien, etc) - Signalement des éditions de messages dans la shoutbox - Autre ? L'objectif de ce ticket est de discuter des différentes options, et d'ouvrir des tickets pour celles retenues.
Darks added the
proposal
label 2023-06-15 09:45:29 +02:00
Author
Owner

Concernant le système de captcha, quelques remarques :

  • ceux qui se basent sur des images ne sont pas accessibles
  • ceux qui se basent sur des bibliothèques sont inclus dans les bypass des moteurs de spam
  • ceux qui servent à entrainer des IA gratuitement → 🤮

Si on souhaite en ajouter un, mon point de vue est d'en faire un personnalisé, éventuellement en répondant à des questions type "En quelle année est sortie la Graph 35+E ?" avec un lien vers le Wiki pour que les invités puissent trouver la réponse.

Ça s'automatise, mais ça demande de développer un module spécialement pour Planète Casio → peu probable (vs du spam humain contre lequel n'importe quel captcha ne sert à rien).

Concernant le système de captcha, quelques remarques : - ceux qui se basent sur des images ne sont pas accessibles - ceux qui se basent sur des bibliothèques sont inclus dans les bypass des moteurs de spam - ceux qui servent à entrainer des IA gratuitement → 🤮 Si on souhaite en ajouter un, mon point de vue est d'en faire un personnalisé, éventuellement en répondant à des questions type "En quelle année est sortie la Graph 35+E ?" avec un lien vers le Wiki pour que les invités puissent trouver la réponse. Ça s'automatise, mais ça demande de développer un module spécialement pour Planète Casio → peu probable (vs du spam humain contre lequel n'importe quel captcha ne sert à rien).
Member

Librecaptchat donne quoi niveau efficacité ?

Librecaptchat donne quoi niveau efficacité ?

Je propose d'avoir un verrouillage pour un compte nouveau de la possibilité de poster un message dans un fil ou de créer un nouveau fil avant de s'être "présenté" sur un fil dédié.

Une fois cette présentation faite, cela déverrouille le compte pour créer des nouveaux fils et/ou poster des messages dans un fil.

Je propose d'avoir un verrouillage pour un compte nouveau de la possibilité de poster un message dans un fil ou de créer un nouveau fil avant de s'être "présenté" sur un fil dédié. Une fois cette présentation faite, cela déverrouille le compte pour créer des nouveaux fils et/ou poster des messages dans un fil.
Author
Owner

Librecaptchat donne quoi niveau efficacité ?

Si tu parles de ça, je suis pas fan pour deux raisons :

  1. C'est basé sur des images donc pour les personnes non/mal-voyantes c'est la merde
  2. Y'a un tas de modules qui savent déjà casser ça à coup de CNN

Je propose d'avoir un verrouillage pour un compte nouveau de la possibilité de poster un message dans un fil ou de créer un nouveau fil avant de s'être "présenté" sur un fil dédié.

Une fois cette présentation faite, cela déverrouille le compte pour créer des nouveaux fils et/ou poster des messages dans un fil.

Pas fan non plus, si t'as pas envie de te présenter tu fais comment ?

> Librecaptchat donne quoi niveau efficacité ? Si tu parles de [ça](https://github.com/librecaptcha/lc-core), je suis pas fan pour deux raisons : 1. C'est basé sur des images donc pour les personnes non/mal-voyantes c'est la merde 1. Y'a un [tas de modules](https://github.com/topics/captcha-solver) qui savent déjà casser ça à coup de CNN > Je propose d'avoir un verrouillage pour un compte nouveau de la possibilité de poster un message dans un fil ou de créer un nouveau fil avant de s'être "présenté" sur un fil dédié. > > Une fois cette présentation faite, cela déverrouille le compte pour créer des nouveaux fils et/ou poster des messages dans un fil. Pas fan non plus, si t'as pas envie de te présenter tu fais comment ?
Owner

Alors personnellement j'ai quelques doutes sur l'analyse.

Dernièrement le spam de la v43 se fait majoritairement via des bots inscrits, et par édition à retardement de messages.

L'antispam du formulaire invité semble être relativement efficace.

C'est contradictoire : l'antispam du formulaire invité est exactement le même que celui du formulaire d'inscription. Puisqu'on a des spam inscrits, il n'y a donc pas de raison qu'on n'ait pas aussi des spams invités. Le spam invité est même plus facile puisqu'il n'y a qu'un formulaire à remplir au lieu de s'inscrire, valider son email, se connecter, et poster.

Moi ce que je vois c'est un mélange de deux types de spams :

  1. Des topics créés sans discrétion avec des noms évidents et des liens évidents par des comptes frais qu'on ne revoit plus jamais.
  2. Des commentaires en apparence innocents et parfois même pertinents (généralement copiés-collés ou traduits par machine d'un autre commentaire du même sujet), édités après coup.

Je ne suis pas convaincu qu'on ait le moindre bot. Les deux méthodes requièrent plusieurs actions et une temporalité non triviale : pour (1) il faut attendre l'email d'inscription, pour (2) il faut attendre que le commentaire soit oublié. Les formulaires v43 ont également des CSRF donc de simples requêtes à l'aveugle ne sont pas suffisantes : il faut charger les pages. L'automatisation est clairement non triviale.

Comme Planète Casio n'utilise aucune API standard (pas PhpBB, pas Wordpress, etc), je ne vois pas un bot accomplir toutes les actions sans que du code spécifique à Planète Casio ne soit écrit, ce qui n'a pas beaucoup de sens pour les spams de type (1) qui sont systématiquement en anglais alors que le site est en français, et semble être un effort démesuré pour les spams de type (2) qui représentent moins de 100 messages à l'année.

Bref, à mon sens le plus probable c'est que des humains poussent leur scam local en copiant/collant les liens et promotions sur tout l'internet, pas des bots.

Et si c'est pas des bots, rien de ce qu'on raconte jusqu'à présent ne va résoudre le problème...

Alors personnellement j'ai quelques doutes sur l'analyse. > Dernièrement le spam de la v43 se fait majoritairement via des bots inscrits, et par édition à retardement de messages. > > L'antispam du formulaire invité semble être relativement efficace. C'est contradictoire : l'antispam du formulaire invité est exactement le même que celui du formulaire d'inscription. Puisqu'on a des spam inscrits, il n'y a donc pas de raison qu'on n'ait pas aussi des spams invités. Le spam invité est même plus facile puisqu'il n'y a qu'un formulaire à remplir au lieu de s'inscrire, valider son email, se connecter, et poster. Moi ce que je vois c'est un mélange de deux types de spams : 1. Des topics créés sans discrétion avec des noms évidents et des liens évidents par des comptes frais qu'on ne revoit plus jamais. 2. Des commentaires en apparence innocents et parfois même pertinents (généralement copiés-collés ou traduits par machine d'un autre commentaire du même sujet), édités après coup. Je ne suis pas convaincu qu'on ait le moindre bot. Les deux méthodes requièrent plusieurs actions et une temporalité non triviale : pour (1) il faut attendre l'email d'inscription, pour (2) il faut attendre que le commentaire soit oublié. Les formulaires v43 ont également des CSRF donc de simples requêtes à l'aveugle ne sont pas suffisantes : il faut charger les pages. L'automatisation est clairement non triviale. Comme Planète Casio n'utilise aucune API standard (pas PhpBB, pas Wordpress, etc), je ne vois pas un bot accomplir toutes les actions sans que du code spécifique à Planète Casio ne soit écrit, ce qui n'a pas beaucoup de sens pour les spams de type (1) qui sont systématiquement en anglais alors que le site est en français, et semble être un effort démesuré pour les spams de type (2) qui représentent moins de 100 messages à l'année. Bref, à mon sens le plus probable c'est que des humains poussent leur scam local en copiant/collant les liens et promotions sur tout l'internet, pas des bots. Et si c'est pas des bots, rien de ce qu'on raconte jusqu'à présent ne va résoudre le problème...

Pas fan non plus, si t'as pas envie de te présenter tu fais comment ?

Pour la présentation, ça peut être ultra minimaliste, juste poster un message "Hello" pour déverrouiller l'accès. Cela peut même être sur un fil de déverrouillage dédié, pas forcément un fil de présentation.

Et si c'est pas des bots, rien de ce qu'on raconte jusqu'à présent ne va résoudre le problème...

Effectivement, ce qu'on dit c'est sur la base de spams issus de bots ou d'une AI lambda. Si derrière on a des gugusses, rien de tout ceci sera efficace.

> Pas fan non plus, si t'as pas envie de te présenter tu fais comment ? Pour la présentation, ça peut être ultra minimaliste, juste poster un message "Hello" pour déverrouiller l'accès. Cela peut même être sur un fil de déverrouillage dédié, pas forcément un fil de présentation. > Et si c'est pas des bots, rien de ce qu'on raconte jusqu'à présent ne va résoudre le problème... Effectivement, ce qu'on dit c'est sur la base de spams issus de bots ou d'une AI lambda. Si derrière on a des gugusses, rien de tout ceci sera efficace.
Owner

Pendant qu'on réfléchit à comment empêcher le spam de se faire poster, voici un élément de réflexion complémentaire.

On peut aussi empêcher les spams qui sont postés d'être visibles. Actuellement les spams se voient bien à cause des notifications de GLaDOS, qui sont visibles assez longtemps sur #general et donnent une mauvaise impression aux visiteurs.

En discutant avec Darks, il semblerait faisable d'effacer les notifications lors de la suppression des commentaires/topics de la façon suivante.

  1. La v4 et la v5 décorent leurs notifications IRC de métadonnées via des message tags qui font partie du protocole IRC standard. Par exemple un tag v4-event=create-topic-210348.
  2. IRC n'a pas de mécanisme standard pour effacer des messages, mais on peut implémenter une extension similaire à celle de Twitch qui a notamment une commande CLEARMSG envoyée par le serveur aux clients lors de la suppression d'un message. Pour cela :
    • Le serveur déclarerait l'extension dans CAP LS et le client l'activerait avec CAP REQ, le classique.
    • L'extension fournirait une commande client pour demander la suppression de tous les messages portant un certain tag v4-event ou v5-event, et une commande serveur pour annoncer cette suppression aux clients.
    • Si on est chauds, associer le droit de suppression à un privilège d'Anope, eg OperServ. Seuls les serveurs v4 et v5 sont supposés l'avoir a priori.
  3. La shoutbox pourrait aisément supporter cette extension et ainsi effacer les notifications lorsqu'on consulte le site web. Les clients IRC externes ne supporteront pas l'extension, mais cela nous semble un compromis acceptable puisque les power users ne sont pas vraiment le type de public à qui le spam donnerait une mauvaise image du site.

Si une extension plus standard supportée par les clients IRC externes existe, on peut aussi l'utiliser. (Une recherche rapide ne m'en a pas montré.)

Pendant qu'on réfléchit à comment empêcher le spam de se faire poster, voici un élément de réflexion complémentaire. On peut aussi empêcher les spams qui _sont_ postés d'être visibles. Actuellement les spams se voient bien à cause des notifications de GLaDOS, qui sont visibles assez longtemps sur `#general` et donnent une mauvaise impression aux visiteurs. En discutant avec Darks, il semblerait faisable d'effacer les notifications lors de la suppression des commentaires/topics de la façon suivante. 1. La v4 et la v5 décorent leurs notifications IRC de métadonnées via des [message tags](https://ircv3.net/specs/extensions/message-tags) qui font partie du protocole IRC standard. Par exemple un tag `v4-event=create-topic-210348`. 2. IRC n'a pas de mécanisme standard pour effacer des messages, mais on peut implémenter une extension similaire à [celle de Twitch](https://dev.twitch.tv/docs/irc/commands/#clearmsg-twitch-commands) qui a notamment une commande `CLEARMSG` envoyée par le serveur aux clients lors de la suppression d'un message. Pour cela : - Le serveur déclarerait l'extension dans `CAP LS` et le client l'activerait avec `CAP REQ`, le classique. - L'extension fournirait une commande client pour demander la suppression de tous les messages portant un certain tag `v4-event` ou `v5-event`, et une commande serveur pour annoncer cette suppression aux clients. - Si on est chauds, associer le droit de suppression à un privilège d'Anope, eg `OperServ`. Seuls les serveurs v4 et v5 sont supposés l'avoir a priori. 3. La shoutbox pourrait aisément supporter cette extension et ainsi effacer les notifications lorsqu'on consulte le site web. Les clients IRC externes ne supporteront pas l'extension, mais cela nous semble un compromis acceptable puisque les power users ne sont pas vraiment le type de public à qui le spam donnerait une mauvaise image du site. Si une extension plus standard supportée par les clients IRC externes existe, on peut aussi l'utiliser. (Une recherche rapide ne m'en a pas montré.)

Moi j'aimais bien l'idée de darks de demander à l'utilisateur quelle est la calculatrice, avec un lien au wiki.

Si vous voulez moi je veux bien le coder :)

EDIT :

Pour les malvoyants on pourrait faire un captcha audio ?

Moi j'aimais bien l'idée de darks de demander à l'utilisateur quelle est la calculatrice, avec un lien au wiki. Si vous voulez moi je veux bien le coder :) EDIT : Pour les malvoyants on pourrait faire un captcha audio ?
Author
Owner

Bon, si je résume on s'en tire avec :

  • Des notifs pour chaque message posté/modifié dans un channel surveillé par l'équipe (pas nécessairement #général, à définir)
  • L'ajout du flag CLEARMSG comme sur l'implémentation IRC de Twitch pour supprimer les notifs de la shout

La modération se fait (hors champ anti-bot) à postériori, on se base sur la réactivité de l'équipe pour modérer le spam.

Ça me va et c'est facile à mettre en place :)

Bon, si je résume on s'en tire avec : - Des notifs pour chaque message posté/modifié dans un channel surveillé par l'équipe (pas nécessairement #général, à définir) - L'ajout du flag `CLEARMSG` comme sur l'implémentation IRC de Twitch pour supprimer les notifs de la shout La modération se fait (hors champ anti-bot) à postériori, on se base sur la réactivité de l'équipe pour modérer le spam. Ça me va et c'est facile à mettre en place :)
Sign in to join this conversation.
No description provided.