È 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:
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.
Fai un backup della tua wiki. (Questo è altamente raccomandato prima di ogni eliminazione di massa irreversibile comunque.)
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.
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);
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.
Le query sopra rimuoveranno le revisioni dello spam (anche se il loro contenuto rimarrà comunque nella text
tabella), ma lasceranno il page_latest
campo di tutte le pagine interessate che puntano a una revisione inesistente. Ciò potrebbe causare confusione, quindi è meglio risolverlo.
Innanzitutto, dobbiamo cancellare la page_latest
colonna per tutte le pagine:
UPDATE page SET page_latest = 0;
Successivamente, ricostruiremo la colonna, eseguendo lo script di manutenzione attachLatest.php (consigliato; ricorda di utilizzare il --fix
parametro 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);
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;
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.