Besoin d'aide avec une quantité massive de spam

Cela a été un véritable casse-tête à gérer, voici quelques informations de base.

J’administre une communauté qui suscite un énorme engouement. Nous avons bien plus d’un million de personnes qui suivent notre projet, et nous avons mis en place un forum Discourse pour aider les développeurs de notre communauté. Essentiellement, c’est un forum de support pour les développeurs afin d’interagir avec notre projet, nous n’autorisons pas la publication de contenu autre que celui lié au développement.

Il y a environ trois jours, une personnalité influente sur Youtube/Twitter a affirmé à tort qu’en s’inscrivant à notre forum de support et en y publiant, on devenait éligible pour recevoir des récompenses/cadeaux de notre part. C’est entièrement faux, et cela a entraîné 3 jours d’inscriptions quasi constantes, ainsi qu’un grand nombre de messages et de sujets de spam publiés sur le forum.

Nous parlons de 2 500 à 7 500 inscriptions par jour en ce moment, principalement originaires de pays asiatiques et du Moyen-Orient (2 pays spécifiques se distinguent comme étant les principaux contrevenants).

Les utilisateurs qui s’inscrivent semblent être un mélange de bots et de vrais utilisateurs. Presque toutes les adresses IP sont uniques (bon mélange d’IPv4 et d’IPv6), et il ne semble pas y avoir de sous-réseaux proéminents à bannir côté IPv4 pour en éliminer une partie (avec IPv6, j’ai eu un peu de succès en bannissant des blocs /24, mais cela semble facilement contournable). Les adresses e-mail sont toutes des Gmail, et un grand nombre d’entre elles semblent être des adresses e-mail jetables/de bots. La seule indication que ce sont des comptes de bots est que beaucoup d’entre eux réutilisent la même image de bannière sur leur profil, ainsi qu’un texte biographique générique “Je suis étudiant”.

J’ai anonymisé cette liste en modifiant les caractères/chiffres, mais pour vous donner des exemples des types d’e-mails associés à ces inscriptions :

  1. syedaleem435@gmail.com
  2. kksam362@gmail.com
  3. julik8641@gmail.com
  4. eishanihal253@gmail.com
  5. subir2426@gmail.com
  6. meeagle38103@gmail.com

Ces utilisateurs s’inscrivent puis créent de nouveaux sujets sans rapport avec notre communauté. Souvent, ces sujets ne sont même pas des mots, c’est comme si un enfant avait tapé au hasard sur le clavier. Les sujets ne sont pas trop difficiles à détecter et à supprimer, mais ce qui a été pire, c’est qu’ils spamment des sujets préexistants avec du contenu de spam/de faible qualité. Beaucoup de nos sujets les plus populaires ont reçu entre 500 et 1 500 nouveaux messages de spam/de faible qualité.

Pour le moment, j’ai complètement désactivé les inscriptions, mais je cherche de l’aide sur les points suivants :

  1. Y a-t-il un moyen de purger massivement les membres ? Puis-je supprimer tous les utilisateurs TL0 qui se sont inscrits au cours des dernières 72 heures ?
  2. Existe-t-il un moyen de détecter les e-mails de spam/jetables et de refuser leur enregistrement ? À ce stade, je serais prêt à bloquer tous les e-mails se terminant par 3 à 5 chiffres pour le moment.
  3. Suggéreriez-vous de régler le silence automatique à une valeur supérieure à 3000 millisecondes ?
  4. Pouvez-vous me donner d’autres astuces ou conseils pour lutter contre des volumes massifs de spam ? J’ai l’impression que cela a été un travail à plein temps ces 2-3 derniers jours. J’utilise Akismet, mais existe-t-il des plugins supplémentaires qui pourraient m’aider ?
5 « J'aime »

Je définirais - au moins temporairement - la création / la réponse pour toutes les catégories sur TL1 ou peut-être même TL2, ou j’utiliserais un assistant personnalisé pour que les nouveaux utilisateurs franchissent quelques obstacles («Je comprends que je ne recevrai pas de récompenses» avec 10 options, dont une seule correcte) pour qu’ils soient ajoutés à un groupe qui peut publier.

4 « J'aime »

Vous pourriez essayer d’utiliser un champ utilisateur personnalisé avec une option de sélection multiple obligatoire sur votre page d’inscription, avec plusieurs réponses, dont une seule est acceptable. Cela ralentira probablement un peu les robots, ou du moins vous donnera un champ facilement filtrable pour aider à supprimer les inscriptions bidon. (NOTE : Après y avoir réfléchi, je soupçonne que cela ne fonctionnera pas car il n’y a rien pour exiger une réponse spécifique. La méthode d’une réponse précédente pourrait mieux fonctionner.)

Je trouve les pièges de type captcha inefficaces de nos jours, les robots peuvent les résoudre plus vite que moi.

Il devrait y avoir un moyen de supprimer les nouveaux utilisateurs L0 dans Rails, mais assurez-vous de faire une sauvegarde d’abord. S’ils ont posté, vous devrez d’abord supprimer ces publications.

D’autres ont dit que l’exigence d’identifiants à deux facteurs pour les inscriptions élimine pratiquement les spammeurs. Je n’ai pas encore eu à recourir à cela.

6 « J'aime »

J’apprécie les réponses jusqu’à présent.

En désactivant les inscriptions pendant une journée, nous avons pu reprendre notre souffle.

@RGJ J’aime votre idée de passer par des étapes pour être ajouté à un groupe qui a des permissions de publication, c’est quelque chose que nous allons explorer.

En utilisant l’explorateur de données, j’ai pu identifier environ 5 000 comptes de bots supplémentaires qui étaient passés sous le radar jusqu’à présent.

@MikeNolan Je ne suis pas sûr d’avoir encore accès à la console Rails. Nous hébergeons directement avec Discourse et je ne faisais pas partie du processus d’achat / d’intégration, donc je remonte cette question à la hiérarchie pour déterminer quel accès nous avons.

J’imagine que je peux également effectuer des suppressions via l’API ? Je vois que je peux facilement générer mes propres identifiants API.

Quelque chose comme :

import csv
import requests
import time

api_key = 'api_key'
api_username = 'api_username'
base_url = 'https://mydomain.com'
headers = {
    'Api-Key': api_key,
    'Api-Username': api_username
}

def delete_user(user_id):
    delete_url = f'{base_url}/admin/users/{user_id}.json'
    response = requests.delete(delete_url, headers=headers)
    
    if response.status_code == 200:
        print(f'Successfully deleted user {user_id}')
    else:
        print(f'Failed to delete user {user_id}. Status code: {response.status_code}, Response: {response.text}')

with open('user_ids_to_delete.csv', 'r') as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        user_id = row[0]
        try:
            delete_user(user_id)
        except Exception as e:
            print(f'Error occurred while deleting user {user_id}: {e}')
        
        time.sleep(1)  # Add a delay to avoid overwhelming the server with requests
1 « J'aime »

Il y a plusieurs années, nos anciens forums (phpbb3) ont été victimes d’une grande vague d’enregistrements bidons. Beaucoup des e-mails ressemblaient à ceux de Gmail que vous avez listés, bien que nous ayons également reçu pas mal d’adresses .ru, notamment de Yandex.

À un moment donné, nous en recevions 1000 par jour. Le temps que nous ayons maîtrisé la situation, nous avions plus de 80 000 enregistrements bidons.

Nous avons résolu le problème en exigeant un identifiant de membre valide et actuel (notre système de membres était totalement séparé) qui n’avait pas déjà été utilisé pour créer un enregistrement de forum. De cette façon, même si quelqu’un avait accès à nos enregistrements de membres (ils sont en ligne), il ne pouvait utiliser un identifiant qu’une seule fois. Les enregistrements bidons sont tombés à pratiquement zéro.

Je n’ai pas assez utilisé l’explorateur de données pour connaître ses limites. Je suis DBA PostgreSQL depuis plus de 20 ans, donc aller directement dans psql n’a pas été un problème pour moi, mais j’ai limité mes activités là-bas à des requêtes en lecture seule.

3 « J'aime »

L’empreinte digitale est-elle toujours une technique viable ou les navigateurs en ont-ils fait un outil sans pouvoir ?

1 « J'aime »

La bonne question serait de savoir si c’est une technique viable :wink:

(Et juste un rappel : c’est illégal dans l’UE)

depuis rails (docker exec -it my_container rails c) :

spammers = User.where(trust_level: 0).where("created_at > ?",  Date.today - 3)
puts "trouvé #{spammers.length} spammeurs"

destroyer = UserDestroyer.new(Discourse.system_user)
spammers.each do |spammer|
  destroyer.destroy(spammer, delete_posts: true)
end

Si elle est uniquement utilisée pour la prévention du spam et non pour le suivi du comportement des utilisateurs, elle sera autorisée par le RGPD en tant qu’« intérêt légitime ».

1 « J'aime »

Et comment quelqu’un l’utiliserait-il sans identification ?

Je ne suis pas sûr de ce que vous entendez par « identification ».

Si vous êtes un utilisateur sur mon forum et que je vous ai banni, je peux utiliser le plugin de fingerprinting pour voir que vous avez créé un nouveau compte sous un autre nom, afin que je puisse également bannir ce compte. Dans ce cas, j’utilise simplement le fingerprinting pour protéger mon propre intérêt en tant que propriétaire du forum. Je ne vous vends rien et je n’envahis pas inutilement votre vie privée. Cela fonctionne de la même manière que le stockage et la comparaison des adresses IP, à la différence près que celles-ci peuvent être facilement modifiées en utilisant un proxy ou un VPN.

2 « J'aime »

Les commentaires dans le sujet de l’outil de plugin de fingerprinting pourraient ne pas être entièrement d’accord avec vous concernant la légalité du fingerprinting et l’UE.

Heureusement, je n’ai actuellement pas de site pour lequel le fingerprinting semblerait être une mesure anti-spam utile.

1 « J'aime »

Avez-vous envisagé d’activer l’approbation des nouveaux utilisateurs ? Vous pourriez également indiquer à votre communauté que les nouveaux membres nécessitent une invitation par lien par e-mail.

Si le youtubeur pose toujours problème, signalez la vidéo et déposez une plainte auprès de Youtube.

1 « J'aime »

Pour faire un retour et conclure - cela a été suivi et résolu par message privé. :partying_face:

Mais pour quiconque se trouve dans une situation similaire, vous pouvez effectivement supprimer des utilisateurs en utilisant l’API si vous n’avez pas accès à la console Rails parce que vous êtes sur un hébergement géré. :+1:

1 « J'aime »