Możliwe jest również robienie tego, co chcesz, bezpośrednio manipulując bazą danych. Szczegóły mogą się nieco różnić w zależności od sytuacji, ale podstawowe kroki wyglądałyby mniej więcej tak:
Ustaw wiki na tryb tylko do odczytu . Zdajesz nie chce ktoś spróbować edycję wiki gdy jesteś aprowizacji z bazy danych.
Utwórz kopię zapasową swojej wiki. (Jest to wysoce zalecane przed każdym nieodwracalnym usunięciem masy.)
Usuń wszystkie konta użytkowników utworzone przez spamerów. Jeśli, jak w powyższym pytaniu, byłeś jedynym prawidłowym użytkownikiem, możesz po prostu:
DELETE FROM user WHERE user_id != YOUR_USER_ID;
Alternatywnie, jeśli nie zostały utworzone nowe ważne konta po odkryciu wiki przez spamerów, możesz znaleźć najwyższy prawidłowy numer identyfikacyjny użytkownika i wykonać:
DELETE FROM user WHERE user_id > LAST_VALID_USER_ID;
Możesz też użyć narzędzia administracyjnego, takiego jak phpMyAdmin, aby ręcznie wybrać prawidłowe konta i usunąć resztę.
Wyczyść dodatkowe dane związane z usuniętymi kontami. Nie jest to absolutnie konieczne, ale te osierocone rekordy są bezużyteczne i po prostu zaśmiecą bazę danych, jeśli ich nie usuniesz:
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);
Usuń wszelkie poprawki, które nie zostały wykonane przez prawidłowego użytkownika:
To jest wielki krok; wszystko przed przygotowaniem, wszystko po sprzątaniu. Po usunięciu wszystkich kont spamowych możesz po prostu:
DELETE FROM revision WHERE rev_user > 0 AND rev_user NOT IN (SELECT user_id FROM user);
Jeśli Twoja wiki ma wyłączoną anonimową edycję (którą zdecydowanie polecam dla prywatnych / testowych stron wiki), powyższe zapytanie powinno wystarczyć, aby pozbyć się wszystkich wersji spamu. Jeśli jednak włączyłeś edycję anonową, będziesz musiał osobno usunąć anonimowy spam .
Jeśli masz pewność, że wszystkie edycje anon na twojej wiki są spamem, jedynymi edycjami dokonanymi przez UID 0, które mogą być konieczne do zachowania, są te dokonane przez samą MediaWiki (takie jak strony importowane spoza wiki). W takim przypadku powinno działać coś takiego jak następujące zapytanie:
DELETE FROM revision WHERE rev_user = 0 AND rev_user_text BETWEEN '1' AND '999';
Spowoduje to usunięcie wszelkich poprawek przez identyfikator UID 0, w których nazwa użytkownika wygląda (niejasno) jak adres IPv4; oznacza to, że zaczyna się cyfrą od 1 do 9.
Jeśli Twoja wiki ma kilka prawdziwych poprawek anonowych, być może będziesz musiał być bardziej kreatywny. Jeśli liczba adresów IP wykorzystywanych przez legalnych niezarejestrowanych redaktorów jest ograniczona, możesz po prostu dodać klauzulę podobną AND rev_user_text NOT IN ('1.2.3.4', '5.6.7.8', '9.10.11.12')
do powyższego zapytania, aby wykluczyć wkłady tych adresów IP z usuwania. Możesz również dodać warunki, na przykład, AND rev_user_text NOT LIKE '192.168.%'
aby zapisać wszystkie zmiany z adresów IP zaczynające się od określonego prefiksu.
Powyższe zapytania pozwolą pozbyć się wersji spamu (chociaż ich zawartość nadal pozostanie w text
tabeli), ale pozostawi page_latest
pole stron, których dotyczy problem, wskazując na nieistniejącą wersję. Może to powodować zamieszanie, więc lepiej to naprawmy.
Najpierw musimy wyczyścić page_latest
kolumnę dla wszystkich stron:
UPDATE page SET page_latest = 0;
Następnie przebudujemy kolumnę, uruchamiając skrypt konserwacyjny attachLatest.php (zalecane; pamiętaj, aby użyć --fix
parametru, aby skrypt faktycznie zmienił bazę danych) lub ręcznie zapytać SQL:
UPDATE page SET page_latest =
(SELECT MAX(rev_id) FROM revision WHERE rev_page = page_id);
Na koniec usuniemy wszystkie strony, dla których nie można znaleźć prawidłowych poprawek (ponieważ zostały utworzone przez spamerów i nigdy nie zawierały żadnej prawidłowej treści):
DELETE FROM page WHERE page_latest = 0;
Dla ostatecznego efektu odbuduj łącza, indeks tekstowy i tabele ostatnich zmian, uruchamiając skrypt konserwacyjny rebuildall.php . Możesz również usunąć zawartość usuniętych wersji spamu z bazy danych, aby nie zajmowały one tam niepotrzebnego miejsca, uruchamiając skrypt konserwacyjny purgeOldText.php .
Gdy to wszystko zrobisz, sprawdź, czy wszystko wygląda dobrze, a jeśli tak, wyłącz tryb tylko do odczytu - mam nadzieję, że po zainstalowaniu niektórych funkcji antyspamowych zapobiegnie to ponownemu wystąpieniu problemu.