Масове видалення змін спаму в Mediawiki


15

В основному мій "приватний" екземпляр mediawiki був настільки ж безпечним, як і скарбничка для малюків. Я вже затягнув це, але мені залишилось близько ста-ти нових сторінок та ревізій, створених сотнями випадково генерованих користувачів.

2 частина питання; Чи є спосіб видалити всі осиротілі сторінки? Чи можу я скасувати всі зміни, які НЕ зроблені певним користувачем (я)?


mediawiki.org/wiki/Manual:Combating_vandalism and mediawiki.org/wiki/Manual:Combating_spam - джерело канонічного характеру, але триває ще робота: phabricator.wikimedia.org/T90238
Немо

Я більше не маю такої проблеми на своєму веб-сайті mediawiki. Якщо у вас все ще виникає ця проблема, відповідайте на мій коментар, і я можу показати вам у прямому ефірі, як я виправляю ці проблеми.
jehovahsays

Відповіді:


19

Якщо ви не хочете використовувати метод експорту та перевстановлення, запропонований danlefree , вам може бути також корисним розширення Nuke . Після встановлення, відвідавши спеціальну сторінку Special: Nuke як адміністратор надає вам таку форму:

Знімок екрана інтерфейсу розширення MediaWiki Nuke

Також є кілька вбудованих сценаріїв обслуговування MediaWiki, які можуть бути корисними, зокрема:

  • cleanupSpam.php , який можна використовувати для відкату та / або видалення всіх версій, що містять посилання на певне ім’я хоста,

  • deleteBatch.php , за допомогою якого можна видалити всі сторінки, перелічені у файлі, та

  • rollbackEdits.php (який, схоже, наразі не має належної документації на wiki), який може бути використаний для повернення всіх змін певного користувача.


Очищення спаму за допомогою прямого доступу до бази даних

Можна також робити те, що ви хочете, безпосередньо маніпулюючи базою даних. Там деталі можуть дещо відрізнятися залежно від вашої ситуації, але основні кроки пройдуть приблизно так:

  1. Встановіть свою вікі в режим лише для читання . Ви не хочете, щоб хтось намагався редагувати вікі під час вашої роботи з базою даних.

  2. Зробіть резервну копію свого вікі. (Це настійно рекомендується перед будь-якими незворотними масовими видаленнями.)

  3. Видаліть усі облікові записи користувачів, створені спамерами. Якщо, як у вищезазначеному питанні, ви були єдиним дійсним користувачем, ви можете просто зробити:

    DELETE FROM user WHERE user_id != YOUR_USER_ID;

    Крім того, якщо після того, як спамери виявили вікі, не було створено нових дійсних облікових записів, ви можете знайти найвищий дійсний ідентифікаційний номер користувача та зробити:

    DELETE FROM user WHERE user_id > LAST_VALID_USER_ID;

    Або ви можете використовувати інструмент адміністратора, як phpMyAdmin, щоб вручну вибрати дійсні облікові записи та видалити решту.

  4. Очистіть додаткові дані, пов’язані з видаленими обліковими записами. Це не обов'язково, але ці осиротілі записи не користуються, і вони просто захарастять вашу базу даних, якщо ви не видалите їх:

    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. Видаліть будь-які зміни, не зроблені дійсним користувачем:

    Це великий крок; все до його підготовки, все після очищення. Після видалення всіх спам-акаунтів ви можете просто зробити:

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

    Якщо у вашій вікі було вимкнено анонімне редагування (що я настійно рекомендую для приватних / тестових вікі), вищезазначеного запиту має бути достатньо, щоб позбутися всіх змін спаму. Якщо у вас було ввімкнено нередагування, вам доведеться видалити анонімний спам окремо.

    Якщо ви впевнені, що всі редагування, які не стосуються вашої вікі, є спамом, єдині зміни, внесені UID 0, які нам можуть знадобитися зберегти, - це зроблені самим MediaWiki (наприклад, сторінки, імпортовані за межами вікі). У такому випадку має працювати щось на зразок наступного запиту:

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

    Це видалить будь-які зміни за допомогою UID 0, де ім'я користувача (нечітко) виглядає як IPv4-адреса; тобто починається з цифри між 1 і 9.

    Якщо у вашій вікі є деякі дійсні законні зміни, можливо, вам доведеться трішки творчіше. Якщо кількість IP-адрес, які використовуються законними незареєстрованими редакторами, обмежена, ви можете просто додати пункт, подібний AND rev_user_text NOT IN ('1.2.3.4', '5.6.7.8', '9.10.11.12')до цього запиту, щоб виключити внески цих IP-адрес із видалення. Ви також можете додати умови, як, скажімо, AND rev_user_text NOT LIKE '192.168.%'зберегти всі зміни з IP-адрес, починаючи з певного префіксу.

  6. Наведені вище запити позбудуться редакцій спаму (хоча їхній вміст все ще залишатиметься в textтаблиці), але залишить page_latestполе будь-яких постраждалих сторінок, вказуючи на неіснуючу редакцію. Це може спричинити плутанину, тому нам краще виправити це.

    Спочатку нам потрібно стерти page_latestстовпчик для всіх сторінок:

    UPDATE page SET page_latest = 0;
  7. Далі ми відновимо стовпчик, або запустивши скрипт технічного обслуговування attachLatest.php (рекомендується; не забудьте використовувати --fixпараметр, щоб сценарій фактично змінює базу даних) або з ручним запитом SQL:

    UPDATE page SET page_latest =
        (SELECT MAX(rev_id) FROM revision WHERE rev_page = page_id);
  8. Нарешті, ми видалимо всі сторінки, для яких не було знайдено дійсних змін (оскільки вони створені спамерами і ніколи не мали дійсного вмісту):

    DELETE FROM page WHERE page_latest = 0;
  9. Для остаточного дотику відновіть посилання, текстовий індекс та таблиці останніх змін, запустивши сценарій обслуговування rebuildall.php . Ви також можете видалити вміст видалених версій спаму з бази даних, щоб вони не зайняли там зайве місце, запустивши скрипт технічного обслуговування purgeOldText.php .

Після цього все перевірте, чи все виглядає добре, і якщо так, вимкніть режим лише для читання - сподіваємось після встановлення деяких функцій проти спаму, щоб уникнути повторної появи проблеми.

Для невеликих вікі настійно рекомендую розширення QuestyCaptcha , яке дозволяє налаштувати простий спеціальний текстовий CAPTCHA. Хитрість полягає в тому, що для кожної вікі, яка має свій набір питань, програмування спаму для правильного відповіді на них було б багато роботи за дуже невеликий прибуток. Я встановив його на власній вікі після того, як потрапив XRumer кілька разів, і з тих пір не бачив жодного спаму.

Пс. Я використав ці вказівки, щоб запустити близько 35000 змін спаму, створених однаково багатьма користувачами з невеликої вікі . Все пройшло нормально. У цьому конкретному випадку вікі (на щастя!) Не дозволяла анонімного редагування, і майже всі законні користувачі були створені до того, як спамери знайшли вікі, тому я міг досить легко спочатку видалити всі спам-акаунти, а потім усі зміни вони створили. (Я випадково видалив один законний обліковий запис спочатку, тому мені довелося відновити з резервного копіювання і ретельніше повторити процес.) Я оновив вищевказані інструкції, щоб краще відобразити те, що я насправді робив, і бути трохи більш загальним. .


Цьому питанню є пару років, але все ще здається, що він добре працював над невеликою вікі, яка накопичила 100 000 спам-ботів. Чи змінилися речі відтоді; чи можуть бути додаткові кроки?
Ant6n

Деякі новини тут? Це "найкращі практики" та "найкращі інструменти" в наші дні?
Пітер Краус

rebuildall.phpне в обслуговуванні: O Інакше дякую
Джеймі Хатбер

5

Найпростіший спосіб вирішити цю ситуацію (якщо ви не заперечуєте над nuke'n'pave) - експортувати всі сторінки вікі, створені чи відредаговані вашим ім'ям користувача, перевстановити вікі та імпортувати створений вами експортний файл.

"Перевстановити" в цьому контексті означатиме:

  1. Експортуйте створені вами статті (імовірно, увійшли як користувач WikiSysop або подібний)
  2. Відкиньте базу даних MW
  3. Створіть порожню базу даних МВт
  4. Скопіюйте LocalSettings.phpфайл у безпечне місце
  5. Повторно завантажте /config/каталог
  6. Запустіть процес установки на новій базі даних MW (зауважте, що ви хочете заново створити свого старого користувача адміністратора)
  7. Видаліть /config/каталог і перенесіть свій старий LocalSettings.phpфайл назад до кореня MW
  8. Імпортуйте файл, створений на кроці №1

Редагування: Ви можете зняти резервну копію бази даних (включаючи зміни спаму), якщо у вас виникнуть проблеми з цим процесом або ви хочете експериментувати з альтернативними способами очищення спаму.


2

Теоретично ви можете написати розширення MediaWiki, щоб робити все, що завгодно, екземпляру MediaWiki, в тому числі робити ті речі, про які ви згадали.

Окрім цього, і окрім "nuke'n'pave", запропонованого danlefree, ви можете розглянути розширення User Merge and Delete для об'єднання та видалення декількох спам-файлів в один обліковий запис, з правками якого можна буде звертатися більше легко.


2

Найпростіший спосіб вирішити цю ситуацію - встановити розширення DeleteBatch . Використовуйте Special: AllPages на своїй вікі, щоб отримати файл сценарію імен сторінки, які ви хочете видалити, і завантажте їх у Special: DeleteBatch.


1

Якщо це лише сто спам-сторінок, ви не робите занадто погано. Мені довелося прибрати вікі, на якому було тисячі спам-сторінок. На цій сторінці я натрапив на корисні поради користувача: Halz: https://www.mediawiki.org/wiki/User:Halz/Mass_despamming, включаючи розбиття обмежень різних інструментів.

Внизу він надав корисний SQL-запит, який працює трохи повільно, але допомагає знаходити сторінки, які, швидше за все, є спамом, особливо якщо ви можете визначити період часу, коли вікі захопили спамери. У Halz також є зламана версія Extension: Nuke, в якій представлені такі види параметрів, що мають можливість запиту, для легкого видалення маси. Він дав мені копію на використання, але я не думаю, що він її опублікував.


1

Настійно рекомендую не возитися з SQL MediaWiki! MediaWiki - складний звір, дуже оптимізований для Вікіпедії. У SQL відбуваються деякі дивні речі, і якщо ви просто ВИДАЛИТИ рядки, речі можуть втратити послідовність.

Якщо у вас є деякі навички програмування, пройдіть API. Pywikibot - хороший вибір.

В іншому випадку перевірте інструменти в maintenance/каталозі. Ви можете спробувати свій власний інструмент, mewsh допомогти з цим (і я просто додав «анти-спам інструменти» , як TODO там).


0

Я взяв на себе інсталяцію і виявив понад 47 000 записів спаму в userтаблиці та майже 900 000 спаму externallinks. Я використовував Sequel Pro і відвідував кожну таблицю та видаляв записи, не зроблені справжніми користувачами. Я знайшов спам в externallinks, page, searchindex, user, watchlist. Це було досить ефективним часом; основна частина мого часу чекала запуску запитів на видалення. Мені пощастило, тому що більшість справжніх редагувань сталися рано в порядку речей.


2
Немає сенсу намагатися видалити спам-посилання з externallinks, оскільки це зайва таблиця метаданих, яка в основному використовується лише для таких речей, як Special: LinkSearch; Після того, як ви очистите фактичні сторінки, ви можете просто запустити, rebuildall.phpщоб стерти їх та відновити. Дітто для searchindex.
Ілмарі Каронен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.