it-swarm.com.de

Massenlöschung von Spam-Revisionen in Mediawiki

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 Revisionen, die NICHT von einem bestimmten Benutzer (mir) vorgenommen wurden, zurückgesetzt werden sollen?

15
Andrew Bolster

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

Screenshot of MediaWiki Nuke extension interface

Es gibt auch mehrere integrierte MediaWiki Wartungsskripte , die nützlich sein könnten, einschließlich:

  • cleanupSpam.php , mit dem alle Revisionen, die einen Link zu einem bestimmten Hostnamen enthalten, rückgängig gemacht 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 (das derzeit keine ordnungsgemäße Dokumentation im Wiki zu haben scheint), mit dem 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. Stelle dein Wiki auf schreibgeschützt . 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 überfrachten 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:

    Dies 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 Anon-Bearbeitung aktiviert hatten, müssen Sie den anonymen Spam blockieren separat.

    Wenn Sie sicher sind, dass all eine Änderung in Ihrem Wiki Spam ist, müssen wir möglicherweise nur die Änderungen von UID 0 beibehalten, die von MediaWiki selbst vorgenommen wurden (z. B. Seiten) von außerhalb des Wikis importiert). 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 der obigen Abfrage einfach eine Klausel wie AND rev_user_text NOT IN ('1.2.3.4', '5.6.7.8', '9.10.11.12') hinzufügen, um Beiträge dieser IPs vom Löschen auszuschließen. Sie können auch Bedingungen wie beispielsweise _AND rev_user_text NOT LIKE '192.168.%'_ hinzufügen, um alle Änderungen von IP-Adressen zu speichern, die mit einem bestimmten Präfix beginnen.

  6. Bei den obigen Abfragen werden die Spam-Überarbeitungen entfernt (obwohl ihr Inhalt weiterhin in der Tabelle text enthalten ist), aber das Feld page_latest aller betroffenen Seiten, auf die verwiesen wird eine nicht existierende Revision. Dies könnte zu Verwirrung führen, daher sollten wir es besser beheben.

    Zuerst müssen wir die Spalte _page_latest_ 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 Parameter _--fix_ zu verwenden, damit das Skript die Datenbank tatsächlich ändert) oder mit a manuelle SQL-Abfrage:

    _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. Sie können 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 schreibgeschützten Modus - hoffentlich nach der Installation einiger Antispamfunktionen , damit das Problem nicht erneut auftritt.

Für kleine Wikis empfehle ich dringend die Erweiterung QuestyCaptcha , 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. (Zuerst habe ich 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 .

19
Ilmari Karonen

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.php -Datei an einen sicheren Ort
  5. Laden Sie das Verzeichnis /config/ 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 Verzeichnis /config/ und verschieben Sie Ihre alte Datei LocalSettings.php 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.

5
danlefree

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

Kurzum, und kurz vor dem von danlefree vorgeschlagenen "nuke'n'pave", könnte die Erweiterung ser Merge and Delete nützlich sein: Sie können damit mehrere Spambot-Konten zu einem einzigen Konto zusammenfassen deren Bearbeitungen können dann leichter angesprochen werden.

2
sampablokuper

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.

2
Rob Kam

Ich empfehle dringend, nicht mit MediaWikis SQL zu spielen! MediaWiki ist ein komplexes Biest, das sehr für Wikipedia optimiert ist. 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.

Überprüfen Sie andernfalls die Tools im Verzeichnis maintenance/. Sie können mein eigenes Tool ausprobieren, mewsh , um dabei zu helfen (und ich habe gerade "Anti-Spam-Tools" als Aufgabe hinzugefügt).

1
guaka

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 bin auf dieser Seite auf einige gute Tipps von User: Halz gestoßen: 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.

1
Harry Wood

Ich habe eine Installation übernommen und über 47.000 Spam-Einträge in der Tabelle user und fast 900.000 Spam-Einträge externallinks gefunden. Ich habe Sequel Pro verwendet und jede Tabelle besucht und Einträge gelöscht, die nicht von authentischen Benutzern erstellt wurden. Ich habe Spam in externallinks, page, searchindex, user, watchlist gefunden. 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.

0
ow3n