Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
asso:moderation:mobilizon [2022/04/16 13:04] qduchemiasso:moderation:mobilizon [2023/03/13 17:05] (Version actuelle) qduchemi
Ligne 1: Ligne 1:
 +{{indexmenu_n>10}}
 ## Mobilizon : vive le spam ! ## Mobilizon : vive le spam !
  
-<bootnote>On suppose que tu as accès au compte administrateur de [l'instance Mobilizon de Picasoft](https://mobilizon.picasoft.net/). Les identifiants sont sur le [[technique:adminsys:secu:password_store:start|pass]], mais tu peux les demander à quelqu'un de l'équipe de modération.</bootnote>+<bootnote>On suppose que tu as accès au compte administrateur de [l'instance Mobilizon de Picasoft](https://mobilizon.picasoft.net/). Les identifiants sont sur le [[asso:tuto:vaultwarden|VaultWarden]], mais tu peux les demander à quelqu'un de l'équipe de modération.</bootnote>
  
 ### Modération fédérée : une autre paire de manches ### Modération fédérée : une autre paire de manches
Ligne 17: Ligne 18:
 - Mais les comptes de spam peuvent venir d'autres instances avec lesquelles nous sommes fédérées. - Mais les comptes de spam peuvent venir d'autres instances avec lesquelles nous sommes fédérées.
  
-Ce qui rend la modération sur les services fédérés très complexes ; à tel point qu'une [thèse conduit{{:asso:moderation:signalements.png|}}e par une membre](https://fedithese.fr/co/fedithese.html) est en cours.+Ce qui rend la modération sur les services fédérés très complexes ; à tel point qu'une [thèse conduite par une membre](https://fedithese.fr/co/fedithese.html) est en cours.
  
 ### Gérer les problèmes locaux ### Gérer les problèmes locaux
Ligne 25: Ligne 26:
 La liste des signalement est accessible depuis le compte administrateur et ressemble à ça : La liste des signalement est accessible depuis le compte administrateur et ressemble à ça :
  
-{{:asso:moderation:signalements.png?600|}}+{{ :asso:moderation:signalements.png?600 |}}
  
 On constate que ces signalement sont bien effectués par des personnes extérieures. Chaque signalement est transmis sur `picasoft@assos.utc.fr`. On constate que ces signalement sont bien effectués par des personnes extérieures. Chaque signalement est transmis sur `picasoft@assos.utc.fr`.
Ligne 33: Ligne 34:
 Deux cas se présentent. Deux cas se présentent.
  
-##### Compte de spam+#### Compte de spam
  
 Un compte fait uniquement de la publicité et du spam, sur toutes les instances. Exemple typique via un signalement : Un compte fait uniquement de la publicité et du spam, sur toutes les instances. Exemple typique via un signalement :
  
-{{:asso:moderation:sign_snow.png|}}+{{ :asso:moderation:sign_snow.png?600 |}}
  
 On clique sur l'identité : on constate que cette identité ne publie que du spam. On clique sur l'identité : on constate que cette identité ne publie que du spam.
  
-{{:asso:moderation:john_profile.png|}}+{{ :asso:moderation:john_profile.png?600 |}}
  
 On décide de supprimer le compte, on y accède au compte en cliquant sur l'email. On décide de supprimer le compte, on y accède au compte en cliquant sur l'email.
Ligne 47: Ligne 48:
 <bootnote>Mobilizon permet de gérer plusieurs identités segmentées associées à un même compte, ce qui permet de segmenter ses différentes activités/profils/etc.</bootnote> <bootnote>Mobilizon permet de gérer plusieurs identités segmentées associées à un même compte, ce qui permet de segmenter ses différentes activités/profils/etc.</bootnote>
  
-{{:asso:moderation:john_delete.png|}}+{{ :asso:moderation:john_delete.png?600 |}}
  
 On clique sur « Suspendre ». On clique sur « Suspendre ».
Ligne 59: Ligne 60:
 Dans ce cas, il sera peut-être pertinent de supprimer uniquement l'événement, mais pas le compte. La procédure est simple : il faut signaler l'événement, et appuyer sur supprimer dans l'interface de modération. Exemple : Dans ce cas, il sera peut-être pertinent de supprimer uniquement l'événement, mais pas le compte. La procédure est simple : il faut signaler l'événement, et appuyer sur supprimer dans l'interface de modération. Exemple :
  
-{{:asso:moderation:delete_event.png|}}+{{ :asso:moderation:delete_event.png?600 |}}
  
 <bootnote>Même pour un·e administrateurice, il n'est pas possible de supprimer un événement depuis sa page dédiée. L'idée est de « forcer » à utiliser les outils de modération, dont on peut garder trace.</bootnote> <bootnote>Même pour un·e administrateurice, il n'est pas possible de supprimer un événement depuis sa page dédiée. L'idée est de « forcer » à utiliser les outils de modération, dont on peut garder trace.</bootnote>
Ligne 75: Ligne 76:
 Par exemple, même après avoir suspendu le compte `buyyoutubeviews` en local, on constate qu'il règle un événement dans le flux :  Par exemple, même après avoir suspendu le compte `buyyoutubeviews` en local, on constate qu'il règle un événement dans le flux : 
  
-{{:asso:moderation:spam_distant.png|}}+{{ :asso:moderation:spam_distant.png?600 |}}
  
 En cliquant dessus, on réalise que c'est un compte distant : En cliquant dessus, on réalise que c'est un compte distant :
  
-{{:asso:moderation:spam_distant_details.png|}}+{{ :asso:moderation:spam_distant_details.png?600 |}}
  
 On peut rechercher ce compte depuis l'interface de modération : On peut rechercher ce compte depuis l'interface de modération :
  
-{{:asso:moderation:spam_distant_search.png|}}+{{ :asso:moderation:spam_distant_search.png?600 |}}
  
 Et choisir de le suspendre, comme dans le cas local. Et choisir de le suspendre, comme dans le cas local.
Ligne 96: Ligne 97:
  
 Il faut probablement engager le dialogue, et en l'absence de réponse, voter une _défédération_, qui se fait facilement depuis l'interface d'administration. Il faut probablement engager le dialogue, et en l'absence de réponse, voter une _défédération_, qui se fait facilement depuis l'interface d'administration.
 +
 +### Grosse vague de spam, détecter les contenus problématiques
 +
 +<bootnote critical>Les techniques montrées ici demandent toujours l'arbitrage d'un être humain. Nous ne pratiquons pas la modération automatique et ces méthodes ne sont pas parfaites, il existe de faux-positifs et de faux-negatifs</bootnote>
 +
 +Une fois dans le conteneur de base de données :
 +
 +```sh
 +psql -U mobilizon -d postgres_mobilizon
 +```
 +
 +Pour détecter les profils problématiques, nous pouvons nous connecter en base et lancer quelques requêtes, la requête ci-dessous indique les évènements dont la durée est supérieure à 80 jours, ces évènement ont de fortes chances d'être du spam :
 +```sql
 +SELECT url FROM events WHERE local = true AND draft = false AND visibility = 'public' AND ends_on - begins_on > '80 days'::interval;
 +```
 +
 +Cette requête recherche des mots clés dans les évènements, en effet nous avons remarqués certains mots clés qui reviennent dans beaucoup de spams :
 +```sql
 +SELECT organizer_actor_id, COUNT(*) AS nb FROM events WHERE local = true AND draft = false AND visibility = 'public' AND title ILIKE '%motclé%' GROUP BY organizer_actor_id ORDER BY nb DESC;
 +```
 +Ces mots clés peuvent être utilisés (non exhaustif, à compléter) :
 +  * cash
 +  * bitcoin
 +  * escort
 +  * driver
 +  * download
 +  * exam
 +  * design (! beaucoup de faux positifs)
 +  * company
 +
 +Cette requête indique les comptes ayant beaucoup d'évènement, faire bien attention, pour beaucoup de comptes c'est tout à fait légitime :
 +```sql
 +SELECT organizer_actor_id, COUNT(*) AS nb FROM events WHERE local = true AND draft = false AND visibility = 'public' GROUP BY organizer_actor_id ORDER BY nb DESC;
 +```
 +
 +On peut ensuite accéder au profil à l'URL `https://mobilizon.picasoft.net/settings/admin/profiles/<ID>`.
 +
 +Cette requête indiques les profils ayant créé des évènement qui démarrent très peu de temps après la création du compte, encore une fois c'est parfois légitime mais c'est un critère commun à beaucoup de spams :
 +```sql
 +SELECT DISTINCT actors.id, actors.url FROM actors INNER JOIN users ON actors.user_id = users.id INNER JOIN events ON events.organizer_actor_id = actors.id WHERE events.begins_on - users.inserted_at < '2 hours'::interval AND events.local = true AND events.visibility = 'public' ORDER BY actors.id DESC;
 +```
  • asso/moderation/mobilizon.1650107057.txt.gz
  • de qduchemi