Benötige Hilfe bei massenhaftem Spam

Das war ein Albtraum, hier sind einige Hintergrundinformationen.

Ich betreibe eine Community, um die eine enorme Hype aufgebaut wurde. Wir haben weit über eine Million Menschen, die unser Projekt verfolgen, und wir haben ein Discourse Forum eingerichtet, um die Entwickler in unserer Community zu unterstützen. Im Wesentlichen ist es ein Entwickler-Support-Forum für die Interaktion mit unserem Projekt, wir erlauben keine Inhalte, die nicht entwicklungsbezogen sind.

Vor etwa drei Tagen behauptete eine prominente YouTube/Twitter-Persönlichkeit fälschlicherweise, dass die Registrierung für unser Support-Forum und das Posten darin einen Anspruch auf Belohnungen/Goodies von unserem Team begründet. Das ist völlig falsch und hat zu 3 Tagen mit fast konstanten Anmeldungen und einer großen Menge an Spam-Posts und -Themen im Forum geführt.

Wir sprechen hier von 2.500 bis 7.500 Anmeldungen pro Tag, hauptsächlich aus asiatischen und nahöstlichen Ländern (2 bestimmte Länder stechen als Haupttäter hervor).

Die sich anmeldenden Benutzer scheinen eine Mischung aus Bots und echten Benutzern zu sein. Fast alle IP-Adressen sind eindeutig (gute Mischung aus IPv4 und IPv6), und es scheinen keine prominenten Subnetze zum Sperren auf der IPv4-Seite zu geben, um Teile davon zu erwischen (bei IPv6 hatte ich etwas Erfolg beim Sperren von /24-Blöcken, aber es scheint leicht umgehbar zu sein). E-Mail-Adressen sind alle G-Mails, und viele davon scheinen Wegwerf-/Bot-E-Mail-Adressen zu sein. Der einzige Hinweis darauf, dass es sich um Bot-Konten handelt, ist, dass viele von ihnen dasselbe Bannerbild in ihrem Profil wiederverwenden, sowie einige generische “Ich bin ein Student”-Biografietexte.

Ich habe diese Liste anonymisiert, indem ich Zeichen/Zahlen geändert habe, aber um Ihnen Beispiele für die Arten von E-Mails zu geben, die mit diesen Anmeldungen verbunden sind:

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

Diese Benutzer melden sich an und erstellen dann neue Themen, die für unsere Community irrelevant sind. Oft sind diese Themen nicht einmal Wörter, es ist, als hätte ein Kleinkind auf die Tastatur eingeschlagen. Die Themen sind nicht allzu schwer zu erkennen und zu löschen, aber schlimmer war, dass sie bestehende Themen mit Spam / Inhalten geringer Qualität spammen. Viele unserer beliebtesten Themen hatten zwischen 500 und 1.500 neue Spam-/Qualitätsbeiträge hinzugefügt.

Derzeit habe ich die Registrierungen vollständig deaktiviert, suche aber nach Hilfe bei Folgendem:

  1. Gibt es eine Möglichkeit, Mitglieder massenhaft zu löschen? Kann ich alle TL0-Benutzer löschen, die in den letzten 72 Stunden registriert wurden?
  2. Gibt es eine Möglichkeit, Spam-/Wegwerf-E-Mails zu erkennen und die Registrierung von ihnen zu verweigern? Zu diesem Zeitpunkt wäre ich bereit, vorerst alle E-Mails zu blockieren, die auf 3-5 Zahlen enden.
  3. Würden Sie vorschlagen, die automatische Stummschaltung auf einen Wert größer als 3000 Millisekunden einzustellen?
  4. Können Sie mir weitere Tipps oder Tricks geben, um massive Spam-Volumen zu bekämpfen? Ich habe das Gefühl, dass dies in den letzten 2-3 Tagen ein Vollzeitjob war. Ich benutze Akismet, aber gibt es zusätzliche Plugins, die mir helfen könnten?
5 „Gefällt mir“

Ich würde - zumindest vorübergehend - das Erstellen/Antworten für alle Kategorien auf TL1 oder vielleicht sogar TL2 setzen oder den Custom Wizard verwenden, damit neue Benutzer einige Hürden nehmen müssen (“Ich verstehe, dass ich keine Belohnungen erhalte” mit 10 Optionen, von denen nur eine richtig ist), um sie einer Gruppe hinzuzufügen, die posten kann.

4 „Gefällt mir“

Sie könnten versuchen, ein benutzerdefiniertes Benutzerfeld mit einer erforderlichen Mehrfachauswahloption auf Ihrer Anmeldeseite zu verwenden, mit mehreren Antworten, von denen nur eine akzeptabel ist. Das wird die Bots wahrscheinlich ein wenig verlangsamen oder Ihnen zumindest ein leicht filterbares Feld geben, um fehlerhafte Anmeldungen zu löschen. (HINWEIS: Nach reiflicher Überlegung vermute ich, dass dies nicht funktionieren wird, da nichts eine bestimmte Antwort erfordert. Die Methode in einer früheren Antwort funktioniert möglicherweise besser.)

Ich finde Captcha-Fallen heutzutage ineffektiv, die Bots können sie schneller lösen als ich.

Es sollte eine Möglichkeit geben, die neuen L0-Benutzer in Rails zu löschen, aber stellen Sie sicher, dass Sie zuerst ein Backup erstellen. Wenn sie gepostet haben, müssen Sie diese Beiträge zuerst löschen.

Andere haben gesagt, dass die Anforderung von Zwei-Faktor-IDs für Anmeldungen die Spammer ziemlich eliminiert. Ich musste noch nicht zu diesem Mittel greifen.

6 „Gefällt mir“

Ich schätze die bisherigen Antworten.

Da die Registrierungen für einen Tag deaktiviert waren, konnten wir uns wieder über Wasser halten.

@RGJ Mir gefällt deine Idee mit den Hürden, die man überwinden muss, um zu einer Gruppe mit Posting-Berechtigungen hinzugefügt zu werden. Das werden wir uns genauer ansehen.

Mithilfe des Datenexplorers konnte ich etwa 5.000 zusätzliche Bot-Konten identifizieren, die bisher unter dem Radar geflogen sind.

@MikeNolan Ich bin mir nicht sicher, ob ich bereits Zugriff auf die Rails-Konsole habe. Wir hosten direkt bei Discourse und ich war nicht am Kauf-/Onboarding-Prozess beteiligt, daher leite ich diese Frage weiter, um herauszufinden, auf welchen Zugriff wir haben.

Ich stelle mir vor, dass ich Löschungen auch über die API durchführen kann? Ich sehe, dass ich mir ganz einfach API-Anmeldeinformationen generieren kann.

Etwas in der Art von:

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'Benutzer {user_id} erfolgreich gelöscht')
    else:
        print(f'Fehler beim Löschen des Benutzers {user_id}. Statuscode: {response.status_code}, Antwort: {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'Fehler beim Löschen des Benutzers {user_id}: {e}')
        
        time.sleep(1)  # Füge eine Verzögerung hinzu, um den Server nicht mit Anfragen zu überlasten
1 „Gefällt mir“

Vor einigen Jahren wurden unsere alten Foren (phpbb3) von einer großen Welle von gefälschten Registrierungen getroffen, von denen viele E-Mails den von Ihnen aufgeführten Gmail-Adressen ähnelten, obwohl wir auch einige von .ru-Adressen, insbesondere Yandex, erhielten.

Zu einem Zeitpunkt erhielten wir 1000 davon pro Tag. Als wir die Situation unter Kontrolle hatten, hatten wir über 80.000 gefälschte Einträge.

Wir haben das Problem gelöst, indem wir eine gültige aktuelle Mitglieds-ID (unser Mitgliedschaftssystem war völlig getrennt), die noch nicht zur Erstellung eines Foreneintrags verwendet worden war, verlangten. Auf diese Weise konnten sie eine ID nur einmal verwenden, selbst wenn jemand Zugriff auf unsere Mitgliedschaftsaufzeichnungen hatte (diese sind online). Gefälschte Registrierungen sanken auf praktisch null.

Ich habe den Daten-Explorer noch nicht genug benutzt, um seine Grenzen zu kennen. Ich bin seit über 20 Jahren PostgreSQL-DBA, daher war der direkte Zugriff auf psql für mich kein Problem, aber ich habe meine Aktivitäten dort auf Leseabfragen beschränkt.

3 „Gefällt mir“

Ist Fingerprinting noch eine praktikable Technik oder haben die Browser es ziemlich zu einem zahnlosen Werkzeug gemacht?

1 „Gefällt mir“

Die richtige Frage wäre, ob es jemals eine praktikable Technik war :wink:

(Und nur zur Erinnerung: es ist in der EU illegal)

aus Rails (docker exec -it my_container rails c):

spammer = User.where(trust_level: 0).where("created_at > ?",  Date.today - 3)
puts "gefunden #{spammer.length} Spammer"

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

Wenn es nur zur Spam-Prävention und nicht zur Verfolgung des Benutzerverhaltens verwendet wird, dann wird es von der DSGVO als „berechtigtes Interesse“ zugelassen.

1 „Gefällt mir“

Und wie sollte jemand es ohne Ausweis benutzen?

Ich bin mir nicht sicher, was Sie mit „Identifizierung“ meinen.

Wenn Sie ein Benutzer in meinem Forum sind und ich Sie gesperrt habe, kann ich das Fingerprinting-Plugin verwenden, um zu sehen, dass Sie ein neues Konto unter einem anderen Namen erstellt haben, damit ich auch dieses Konto sperren kann. In diesem Fall nutze ich das Fingerprinting lediglich zum Schutz meiner eigenen Interessen als Forenbetreiber. Ich verkaufe Ihnen nichts und verletze Ihre Privatsphäre nicht unnötig. Es funktioniert genauso wie das Speichern und Vergleichen von IP-Adressen, mit dem Unterschied, dass diese durch die Verwendung eines Proxys oder VPN leicht geändert werden können.

2 „Gefällt mir“

Die Kommentare im Thema des Fingerprinting-Plugin-Tools stimmen möglicherweise nicht vollständig mit Ihnen bezüglich der Legalität von Fingerprinting und der EU überein.

Glücklicherweise habe ich derzeit keine Website, für die Fingerprinting eine nützliche Anti-Spam-Maßnahme zu sein scheint.

1 „Gefällt mir“

Haben Sie erwogen, die Genehmigung neuer Benutzer zu aktivieren? Sie könnten Ihrer Community auch mitteilen, dass neue Mitglieder eine E-Mail-Einladung benötigen.

Wenn der YouTuber weiterhin ein Problem darstellt, markieren Sie das Video und reichen Sie eine Beschwerde bei YouTube ein.

1 „Gefällt mir“

Nur um darauf zurückzukommen und dies abzuschließen – dies wurde per PM nachverfolgt und geklärt. :partying_face:

Aber für alle in einer ähnlichen Situation: Sie können Benutzer tatsächlich über die API löschen, wenn Sie aufgrund des Managed Hostings keinen Zugriff auf die Rails-Konsole haben. :+1:

1 „Gefällt mir“