Massenlöschung von Spam-Versionen in Mediawiki

15

Grundsätzlich war meine "private" Mediawiki-Instanz ungefähr so ​​sicher wie ein Kleinkind-Sparschwein. Ich habe es jetzt verschärft, aber es verbleiben ungefähr hundert neue Seiten und Revisionen, die von Hunderten zufällig generierter Benutzer erstellt wurden.

2-teilige Frage; Gibt es eine Möglichkeit, alle verwaisten Seiten zu löschen? Kann ich sagen, dass alle Überarbeitungen, die NICHT von einem bestimmten Benutzer (mir) vorgenommen wurden, rückgängig gemacht werden sollen?

Andrew Bolster
quelle
mediawiki.org/wiki/Manual:Combating_vandalism und mediawiki.org/wiki/Manual:Combating_spam sind die kanonischen Quellen, aber es wird noch mehr gearbeitet: phabricator.wikimedia.org/T90238
Nemo
Ich habe dieses Problem mit meiner MediaWiki-Website nicht mehr. Wenn Sie immer noch dieses Problem haben, antworten Sie auf meinen Kommentar und ich kann Ihnen in einem Live-Stream zeigen, wie ich diese Probleme behebe.
Jehova sagt

Antworten:

19

Wenn Sie die von danlefree vorgeschlagene Methode zum Exportieren und erneuten Installieren nicht verwenden möchten, ist die Nuke- Erweiterung möglicherweise auch hilfreich. Nach der Installation erhalten Sie auf der Spezialseite Spezial: Nuke als Administrator ein Formular wie das folgende:

Screenshot der MediaWiki Nuke-Erweiterungsoberfläche

Es gibt auch mehrere integrierte MediaWiki- Wartungsskripte , die nützlich sein könnten, darunter:

  • cleanupSpam.php , mit dem alle Revisionen, die einen Link zu einem bestimmten Hostnamen enthalten, zurückgesetzt und / oder gelöscht werden können,

  • deleteBatch.php , mit dem alle in einer Datei aufgelisteten Seiten gelöscht werden können, und

  • rollbackEdits.php (die derzeit keine ordnungsgemäße Dokumentation im Wiki zu haben scheint), mit der alle Änderungen eines bestimmten Benutzers rückgängig gemacht werden können.


Spam-Bereinigung mit direktem Datenbankzugriff

Es ist auch möglich, das zu tun, was Sie wollen, indem Sie die Datenbank direkt bearbeiten. Die Details können je nach Situation etwas variieren, aber die grundlegenden Schritte würden ungefähr so ​​aussehen:

  1. Setze dein Wiki in den schreibgeschützten Modus . Sie möchten nicht, dass jemand versucht, das Wiki zu bearbeiten, während Sie mit der Datenbank herumspielen.

  2. Erstellen Sie eine Sicherungskopie Ihres Wikis. (Dies wird dringend empfohlen, bevor irreversible Massenlöschungen vorgenommen werden.)

  3. Löschen Sie alle von den Spammern erstellten Benutzerkonten. Wenn Sie, wie in der obigen Frage, der einzige gültige Benutzer waren, können Sie einfach Folgendes tun:

    DELETE FROM user WHERE user_id != YOUR_USER_ID;

    Wenn keine neuen gültigen Konten erstellt wurden, nachdem die Spammer das Wiki entdeckt haben, können Sie alternativ die höchste gültige Benutzer-ID-Nummer finden und folgendermaßen vorgehen:

    DELETE FROM user WHERE user_id > LAST_VALID_USER_ID;

    Oder Sie können ein Admin-Tool wie phpMyAdmin verwenden, um die gültigen Konten manuell auszuwählen und den Rest zu löschen.

  4. Bereinigen Sie die zusätzlichen Daten, die mit den gelöschten Konten verknüpft sind. Dies ist nicht unbedingt erforderlich, aber diese verwaisten Datensätze haben keine Verwendung und überladen Ihre Datenbank nur, wenn Sie sie nicht löschen:

    DELETE FROM user_groups WHERE ug_user NOT IN (SELECT user_id FROM user);
    DELETE FROM user_properties WHERE up_user NOT IN (SELECT user_id FROM user);
    DELETE FROM user_newtalk WHERE user_id NOT IN (SELECT user_id FROM user);
  5. Löschen Sie alle Revisionen, die nicht von einem gültigen Benutzer vorgenommen wurden:

    Das ist der große Schritt; alles, bevor es Vorbereitung war, alles, nachdem es aufgeräumt wurde. Wenn alle Spam-Konten gelöscht sind, können Sie einfach Folgendes tun:

    DELETE FROM revision WHERE rev_user > 0 AND rev_user NOT IN (SELECT user_id FROM user);

    Wenn in Ihrem Wiki die anonyme Bearbeitung deaktiviert war (was ich für private / Test-Wikis dringend empfehle), sollte die obige Abfrage ausreichen, um alle Spam-Revisionen zu entfernen. Wenn Sie jedoch die anonyme Bearbeitung aktiviert haben, müssen Sie den anonymen Spam separat bereinigen .

    Wenn Sie sicher sind, dass alle anonymen Änderungen in Ihrem Wiki Spam sind, müssen wir möglicherweise nur die Änderungen von UID 0 beibehalten, die von MediaWiki selbst vorgenommen wurden (z. B. von außerhalb des Wikis importierte Seiten). In diesem Fall sollte etwa die folgende Abfrage funktionieren:

    DELETE FROM revision WHERE rev_user = 0 AND rev_user_text BETWEEN '1' AND '999';

    Dadurch werden alle Überarbeitungen von UID 0 gelöscht, bei denen der Benutzername (vage) wie eine IPv4-Adresse aussieht. Das heißt, es beginnt mit einer Ziffer zwischen 1 und 9.

    Wenn Ihr Wiki einige legitime Änderungen enthält, müssen Sie möglicherweise kreativer werden. Wenn die Anzahl der von legitimen nicht registrierten Redakteuren verwendeten IP-Adressen begrenzt ist, können Sie AND rev_user_text NOT IN ('1.2.3.4', '5.6.7.8', '9.10.11.12')der obigen Abfrage einfach eine Klausel hinzufügen , um Beiträge dieser IPs vom Löschen auszuschließen. Sie können auch Bedingungen hinzufügen, AND rev_user_text NOT LIKE '192.168.%'um beispielsweise alle Änderungen von IP-Adressen zu speichern, die mit einem bestimmten Präfix beginnen.

  6. Bei den oben aufgeführten Abfragen werden die Spam-Revisionen entfernt (obwohl der Inhalt weiterhin in der textTabelle enthalten ist), aber page_latestalle betroffenen Seiten, die auf eine nicht vorhandene Revision verweisen, werden nicht angezeigt. Dies könnte zu Verwirrung führen, daher sollten wir es besser beheben.

    Zuerst müssen wir die page_latestSpalte für alle Seiten löschen:

    UPDATE page SET page_latest = 0;
  7. Als Nächstes erstellen wir die Spalte neu, indem wir entweder das Wartungsskript attachLatest.php ausführen (empfohlen; denken Sie daran, den --fixParameter zu verwenden , damit das Skript die Datenbank tatsächlich ändert) oder eine manuelle SQL-Abfrage durchführen:

    UPDATE page SET page_latest =
        (SELECT MAX(rev_id) FROM revision WHERE rev_page = page_id);
  8. Schließlich löschen wir alle Seiten, für die keine gültigen Überarbeitungen gefunden wurden (weil sie von Spammern erstellt wurden und keinen gültigen Inhalt hatten):

    DELETE FROM page WHERE page_latest = 0;
  9. Erstellen Sie für den letzten Schliff die Tabellen mit den Links, dem Textindex und den letzten Änderungen neu, indem Sie das Wartungsskript rebuildall.php ausführen . Möglicherweise möchten Sie auch den Inhalt der gelöschten Spam-Revisionen aus der Datenbank entfernen, damit sie dort keinen unnötigen Speicherplatz belegen , indem Sie das Wartungsskript purgeOldText.php ausführen .

Überprüfen Sie anschließend, ob alles in Ordnung ist, und deaktivieren Sie in diesem Fall den Nur-Lese-Modus - hoffentlich nach der Installation einiger Anti-Spam-Funktionen , damit das Problem nicht erneut auftritt.

Für kleine Wikis empfehle ich dringend die QuestyCaptcha- Erweiterung, mit der Sie ein einfaches benutzerdefiniertes textbasiertes CAPTCHA konfigurieren können. Der Trick ist, dass jedes Wiki seine eigenen Fragen hat und es eine Menge Arbeit bedeutet, einen Spambot zu programmieren, um sie richtig zu beantworten. Ich habe es in meinem eigenen Wiki installiert, nachdem ich ein paar Mal von XRumer getroffen wurde, und seitdem habe ich keinen Spam mehr gesehen.

Ps. Mit diesen Anweisungen habe ich ungefähr 35.000 Spam-Revisionen überprüft, die von ebenso vielen Benutzern aus einem kleinen Wiki erstellt wurden . Alles lief gut. In diesem speziellen Fall erlaubte das Wiki (zum Glück!) Keine anonyme Bearbeitung, und fast alle legitimen Benutzer wurden erstellt, bevor die Spammer das Wiki fanden, sodass ich ziemlich einfach zuerst alle Spam-Konten und dann alle Überarbeitungen löschen konnte sie hatten geschaffen. (Ich habe zuerst versehentlich ein legitimes Konto gelöscht, daher musste ich es aus dem Backup wiederherstellen und den Vorgang genauer wiederholen.) Ich habe die obigen Anweisungen aktualisiert, um besser zu reflektieren, was ich tatsächlich getan habe, und um etwas allgemeiner zu sein .

Ilmari Karonen
quelle
Diese Frage ist ein paar Jahre alt und scheint in einem kleinen Wiki, in dem sich 100.000 Spam-Bots angesammelt haben, immer noch gut funktioniert zu haben. Haben sich die Dinge seitdem geändert? gibt es vielleicht zusätzliche schritte?
Ant6n
Neuigkeiten hier? Dies sind heutzutage die "Best Practices" und "Best Tools"?
Peter Krauss
rebuildall.phpist nicht in Wartung: O Sonst danke
Jamie Hutber
5

Die einfachste Möglichkeit, mit dieser Situation umzugehen (wenn Sie nichts dagegen haben, können Sie nuke'n'pave verwenden), besteht darin, alle von Ihrem Benutzernamen erstellten oder bearbeiteten Wiki-Seiten zu exportieren, das Wiki neu zu installieren und die von Ihnen erstellte Exportdatei zu importieren.

"Neu installieren" würde in diesem Zusammenhang bedeuten:

  1. Von Ihnen erstellte Artikel exportieren (vermutlich als WikiSysop-Benutzer oder ähnlich angemeldet)
  2. Löschen Sie die MW-Datenbank
  3. Erstellen Sie eine leere MW-Datenbank
  4. Kopieren Sie Ihre LocalSettings.phpDatei an einen sicheren Ort
  5. Laden Sie das /config/Verzeichnis erneut hoch
  6. Führen Sie den Installationsvorgang in der neuen MW-Datenbank aus (beachten Sie, dass Sie Ihren alten Administratorbenutzer neu erstellen möchten).
  7. Löschen Sie das /config/Verzeichnis und verschieben Sie Ihre alte LocalSettings.phpDatei zurück in das MW-Stammverzeichnis
  8. Importieren Sie die in Schritt 1 erstellte Datei

Bearbeiten: Möglicherweise möchten Sie eine Datenbanksicherung (einschließlich Spam-Überarbeitungen) abrufen, falls Sie Probleme mit diesem Vorgang haben oder mit alternativen Methoden zum Entfernen von Spam experimentieren möchten.

danlefree
quelle
2

Theoretisch könnten Sie eine MediaWiki-Erweiterung schreiben, um eine MediaWiki-Instanz nach Belieben zu bearbeiten, einschließlich der von Ihnen genannten Aufgaben.

Abgesehen von der von danlefree vorgeschlagenen "nuke'n'pave" -Erweiterung ist die Erweiterung " User Merge and Delete " möglicherweise hilfreich: Sie können damit mehrere Spambot-Konten zu einem einzigen Konto zusammenfassen, dessen Änderungen dann besser bearbeitet werden können leicht.

sampablokuper
quelle
2

Die einfachste Möglichkeit, mit dieser Situation umzugehen, besteht darin, die Erweiterung DeleteBatch zu installieren . Verwenden Sie Special: AllPages in Ihrem Wiki, um eine Skriptdatei mit den Seitennamen zu erhalten, die Sie löschen möchten, und laden Sie sie in Special: DeleteBatch.

Rob Kam
quelle
1

Wenn es nur einhundert Spam-Seiten sind, geht es Ihnen nicht allzu schlecht. Ich musste ein Wiki mit Tausenden von Spam-Seiten aufräumen. Ich habe einige gute Tipps von User: Halz auf dieser Seite gefunden: https://www.mediawiki.org/wiki/User:Halz/Mass_despamming, einschließlich einer Aufschlüsselung der Einschränkungen der verschiedenen Tools.

Unten hat er eine nützliche SQL-Abfrage bereitgestellt, die etwas langsam ausgeführt wird, aber Ihnen hilft, Seiten zu finden, bei denen es sich höchstwahrscheinlich um Spam handelt, insbesondere wenn Sie den Zeitraum ermitteln können, in dem das Wiki von Spammern übernommen wurde. Halz hat auch eine gehackte Version von Extension: Nuke, die diese Art von abfragbaren Parametern zum einfachen Löschen von Massen enthält. Er hat mir eine Kopie zur Verwendung gegeben, aber ich glaube nicht, dass er sie veröffentlicht hat.

Harry Wood
quelle
1

Ich empfehle dringend, sich nicht mit MediaWikis SQL anzulegen! MediaWiki ist ein komplexes Biest, sehr optimiert für Wikipedia. Es gibt einige seltsame Dinge in SQL, und wenn Sie Zeilen einfach LÖSCHEN, kann dies zu Konsistenzverlusten führen.

Wenn Sie über Programmierkenntnisse verfügen, gehen Sie die API durch. Pywikibot ist eine gute Wahl.

Andernfalls überprüfen Sie die Tools im maintenance/Verzeichnis. Sie können mein eigenes Tool ausprobieren , mewsh , um dies zu unterstützen (und ich habe dort gerade "Anti-Spam-Tools" hinzugefügt).

fifi finanzen
quelle
0

Ich habe eine Installation übernommen und über 47.000 Spam-Einträge in der userTabelle und fast 900.000 Spam- Einträge gefunden externallinks. Ich habe Sequel Pro verwendet und jede Tabelle besucht und Einträge gelöscht, die nicht von authentischen Benutzern erstellt wurden. Ich fand Spam externallinks, page, searchindex, user, watchlist. Es war ziemlich zeiteffizient; Der Großteil meiner Zeit wartete darauf, dass Löschabfragen ausgeführt wurden. Ich hatte Glück, denn die meisten authentischen Änderungen erfolgten früh in der Reihenfolge der Dinge.

ow3n
quelle
2
Es hat keinen Sinn, zu versuchen, Spam-Links zu löschen externallinks, da dies eine redundante Metadatentabelle ist, die im Grunde nur für Dinge wie Special verwendet wird: LinkSearch; Sobald Sie die eigentlichen Seiten bereinigt haben, können Sie sie einfach rebuildall.phplöschen und neu erstellen . Das Gleiche gilt für searchindex.
Ilmari Karonen