Eliminazione di massa delle revisioni di spam in Mediawiki


15

Fondamentalmente la mia istanza "privata" di mediawiki era sicura quanto un salvadanaio per bambini. L'ho rafforzato ora, ma mi rimangono circa un centinaio di nuove pagine e revisioni generate da centinaia di utenti generati casualmente.

Domanda in 2 parti; C'è un modo per eliminare tutte le pagine orfane? Posso dire di ripristinare tutte le revisioni NON apportate da un determinato utente (me)?



Non ho più questo problema con il mio sito web mediawiki. Se il problema persiste, rispondi al mio commento e posso mostrarti in streaming live come risolvere questi problemi.
jehovahsays

Risposte:


19

Se non desideri utilizzare il metodo di esportazione e reinstallazione suggerito da danlefree , potresti trovare utile anche l' estensione Nuke . Una volta installato, visitando la pagina speciale Speciale: Nuke come amministratore ti dà un modulo come questo:

Schermata dell'interfaccia di estensione NuW di MediaWiki

Esistono anche diversi script di manutenzione MediaWiki integrati che potrebbero essere utili, tra cui:

  • cleanupSpam.php , che può essere utilizzato per il rollback e / o eliminare tutte le revisioni contenenti un collegamento a un determinato nome host,

  • deleteBatch.php , che può essere utilizzato per eliminare tutte le pagine elencate in un file e

  • rollbackEdits.php (che al momento non sembra avere una documentazione adeguata sul wiki), che può essere usato per ripristinare tutte le modifiche di un utente specificato.


Pulizia spam tramite accesso diretto al database

È anche possibile fare ciò che vuoi manipolando direttamente il database. I dettagli possono variare leggermente a seconda della situazione, ma i passaggi di base potrebbero andare in questo modo:

  1. Imposta la tua wiki in modalità di sola lettura . Tu non vuoi che qualcuno a provare a modificare il wiki mentre Stai fare con il database.

  2. Fai un backup della tua wiki. (Questo è altamente raccomandato prima di ogni eliminazione di massa irreversibile comunque.)

  3. Elimina tutti gli account utente creati dagli spammer. Se, come nella domanda sopra, tu fossi l'unico utente valido, puoi semplicemente fare:

    DELETE FROM user WHERE user_id != YOUR_USER_ID;

    In alternativa, se non sono stati creati nuovi account validi dopo che gli spammer hanno scoperto il wiki, puoi trovare il numero ID utente valido più alto ed eseguire:

    DELETE FROM user WHERE user_id > LAST_VALID_USER_ID;

    Oppure puoi utilizzare uno strumento di amministrazione come phpMyAdmin per selezionare manualmente gli account validi ed eliminare il resto.

  4. Elimina i dati aggiuntivi associati agli account eliminati. Questo non è strettamente necessario, ma quei record orfani non servono e ingombrano il database se non li elimini:

    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. Elimina eventuali revisioni non eseguite da un utente valido:

    Questo è il grande passo; tutto prima della preparazione, tutto dopo la pulizia. Con tutti gli account spam eliminati, puoi semplicemente fare:

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

    Se la tua wiki ha disabilitato la modifica anonima (che consiglio vivamente per wiki privati ​​/ di prova), la query sopra dovrebbe essere sufficiente per sbarazzarsi di tutte le revisioni dello spam. Se hai abilitato una modifica anon, tuttavia, dovrai annotare separatamente lo spam anonimo .

    Se sei sicuro che tutte le modifiche anon del tuo wiki sono spam, le uniche modifiche apportate da UID 0 che potremmo dover conservare sono quelle fatte da MediaWiki stesso (come le pagine importate dall'esterno del wiki). In tal caso, dovrebbe funzionare qualcosa come la seguente query:

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

    Ciò eliminerà qualsiasi revisione di UID 0 in cui il nome utente appare (vagamente) come un indirizzo IPv4; cioè inizia con una cifra compresa tra 1 e 9.

    Se la tua wiki ha alcune modifiche anon legittime effettive, potresti dover diventare un po 'più creativo. Se il numero di indirizzi IP utilizzati da editor non registrati legittimi è limitato, è possibile aggiungere una clausola simile AND rev_user_text NOT IN ('1.2.3.4', '5.6.7.8', '9.10.11.12')alla query sopra per escludere i contributi di tali IP dall'eliminazione. Puoi anche aggiungere condizioni come, diciamo, AND rev_user_text NOT LIKE '192.168.%'per salvare tutte le modifiche dagli indirizzi IP a partire da un prefisso particolare.

  6. Le query sopra rimuoveranno le revisioni dello spam (anche se il loro contenuto rimarrà comunque nella texttabella), ma lasceranno il page_latestcampo di tutte le pagine interessate che puntano a una revisione inesistente. Ciò potrebbe causare confusione, quindi è meglio risolverlo.

    Innanzitutto, dobbiamo cancellare la page_latestcolonna per tutte le pagine:

    UPDATE page SET page_latest = 0;
  7. Successivamente, ricostruiremo la colonna, eseguendo lo script di manutenzione attachLatest.php (consigliato; ricorda di utilizzare il --fixparametro in modo che lo script cambi effettivamente il database) o con una query SQL manuale:

    UPDATE page SET page_latest =
        (SELECT MAX(rev_id) FROM revision WHERE rev_page = page_id);
  8. Infine, elimineremo tutte le pagine per le quali non è stato possibile trovare revisioni valide (perché sono state create dagli spammer e non hanno mai avuto contenuti validi):

    DELETE FROM page WHERE page_latest = 0;
  9. Per un tocco finale, ricostruisci i collegamenti, l'indice di testo e le tabelle delle modifiche recenti eseguendo lo script di manutenzione rebuildall.php . Potresti anche voler rimuovere il contenuto delle revisioni di spam cancellate dal database, in modo che non occupino spazio inutile lì, eseguendo lo script di manutenzione purgeOldText.php .

Una volta fatto tutto, controlla che tutto appaia bene e, in tal caso, disattiva la modalità di sola lettura - si spera dopo aver installato alcune funzionalità anti-spam per evitare il ripetersi del problema.

Per i wiki piccoli, consiglio vivamente l' estensione QuestyCaptcha , che consente di configurare un semplice CAPTCHA basato su testo personalizzato. Il trucco è che, con ogni wiki con le proprie domande, programmare uno spambot per rispondere correttamente sarebbe molto lavoro per un guadagno molto piccolo. L'ho installato sul mio wiki dopo essere stato colpito da XRumer un paio di volte e da allora non ho più visto spam.

Ps. Ho usato queste istruzioni per annusare circa 35.000 revisioni di spam create da altrettanti utenti da una piccola wiki . Tutto è andato bene. In questo caso particolare, il wiki (per fortuna!) Non consentiva l'editing anonimo, e quasi tutti gli utenti legittimi sono stati creati prima che gli spammer trovassero il wiki, quindi ho potuto abbastanza facilmente eliminare prima tutti gli account di spam e quindi tutte le revisioni avevano creato. (All'inizio ho eliminato accidentalmente un account legittimo, quindi ho dovuto ripristinare dal backup e ripetere il processo con maggiore attenzione.) Ho aggiornato le istruzioni sopra per riflettere meglio ciò che ho effettivamente fatto e per essere un po 'più generico .


Questa domanda ha un paio d'anni, sembra ancora aver funzionato bene su una piccola wiki che aveva accumulato 100.000 robot spam. Da allora le cose sono cambiate; ci sono forse passaggi aggiuntivi?
Ant6n

Qualche novità qui? Queste sono le "migliori pratiche" e "i migliori strumenti" al giorno d'oggi?
Peter Krauss,

rebuildall.phpnon è in manutenzione: O altrimenti grazie
Jamie Hutber

5

Il modo più semplice per gestire questa situazione (se non ti dispiace un nuke'n'pave) sarebbe esportare tutte le pagine wiki create o modificate dal tuo nome utente, reinstallare il wiki e importare il file di esportazione che hai generato.

"Reinstalla" in questo contesto significherebbe:

  1. Esporta articoli creati da te (presumibilmente connessi come utente WikiSysop o simili)
  2. Rilascia il database MW
  3. Creare un database MW vuoto
  4. Copia il tuo LocalSettings.phpfile in un luogo sicuro
  5. Ricarica la /config/directory
  6. Esegui il processo di installazione sul nuovo database MW (tieni presente che vorrai ricreare il tuo vecchio utente amministratore)
  7. Elimina la /config/directory e sposta il tuo vecchioLocalSettings.php file nella radice MW
  8. Importa il file creato al passaggio 1

Modifica: è possibile che si desideri eseguire il backup di un backup del database (comprese le revisioni dello spam) nel caso in cui si verifichino problemi con questo processo o si desideri sperimentare metodi alternativi per eliminare lo spam.


2

In teoria, potresti scrivere un'estensione di MediaWiki per fare ciò che vuoi in un'istanza di MediaWiki, incluso fare le cose che hai menzionato.

A parte questo, e a corto di "nuke'n'pave" suggerito da danlefree, potresti trovare utile l'estensione Unisci ed Elimina utente : puoi usarlo per consolidare più account spambot in un singolo account le cui modifiche possono quindi essere indirizzate più facilmente.


2

Il modo più semplice per gestire questa situazione è installare l'estensione DeleteBatch . Usa Special: AllPages sul tuo wiki per ottenere un file di script con i nomi delle pagine che vuoi eliminare e caricarlo in Special: DeleteBatch.


1

Se sono solo cento pagine di spam non stai facendo troppo male. Ho dovuto ripulire un wiki con migliaia di pagine spammate. Mi sono imbattuto in alcuni buoni consigli dell'utente: Halz in questa pagina: https://www.mediawiki.org/wiki/User:Halz/Mass_despamming tra cui una ripartizione dei limiti dei vari strumenti.

In fondo ha fornito un'utile query SQL che funziona un po 'lentamente ma ti aiuta a trovare pagine che sono molto probabilmente spam, in particolare se riesci a identificare il periodo di tempo in cui il wiki è stato rilevato dagli spammer. Halz ha anche una versione compromessa di Extension: Nuke che presenta questo tipo di parametri che possono essere interrogati per una facile cancellazione di massa. Mi ha dato una copia da usare, ma non credo che l'abbia pubblicato.


1

Consiglio vivamente di non scherzare con l'SQL di MediaWiki!MediaWiki è una bestia complessa, molto ottimizzata per Wikipedia. Ci sono alcune cose strane in corso in SQL e se semplicemente ELIMINA righe le cose potrebbero perdere coerenza.

Se hai alcune capacità di programmazione, passa attraverso l'API. Pywikibot è una buona scelta.

Altrimenti, controlla gli strumenti nella maintenance/directory. Potresti provare il mio strumento, mewsh per aiutarti (e ho appena aggiunto "strumenti anti-spam" come todo lì).


0

Ho rilevato un'installazione e ho trovato oltre 47.000 voci di spam nella usertabella e quasi 900.000 di spam externallinks. Ho usato Sequel Pro e ho visitato ogni tabella e cancellato le voci non create da utenti autentici. Ho trovato spam externallinks, page, searchindex, user, watchlist. Era abbastanza efficiente in termini di tempo; la maggior parte del mio tempo era in attesa dell'esecuzione di query di eliminazione. Sono stato fortunato perché la maggior parte delle modifiche autentiche è avvenuta nelle prime fasi dell'ordine.


2
Non ha senso tentare di eliminare i collegamenti spam externallinks, dal momento che si tratta di una tabella di metadati ridondante che viene sostanzialmente utilizzata solo per cose come Special: LinkSearch; una volta ripulite le pagine effettive, puoi semplicemente eseguire rebuildall.phpper cancellarle e ricostruirle. Idem per searchindex.
Ilmari Karonen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.