6

Так,

У меня есть личная вики, которую я использую для документирования кода и практики программирования, и всего такого хорошего в StackOverflow. Я связался с одной из страниц на SO ответе и BOOM! Спам Боты.

К сожалению, неготовность к этому приводит к тому, что большинство моих страниц теперь заполнены ссылками на сайты, на которые я никогда не буду нажимать.

У меня вопрос, как я могу сделать массовый откат вместо отдельных откатов. Например, есть ли способ удалить все изменения, сделанные с помощью определенного IP-адреса? Или мне нужно по отдельности просматривать каждую страницу и откатывать их вручную.

Спасибо за любую помощь!

Изменить: Это также выглядит как система отката MediaWiki также не является интуитивно понятным. Боты внесли не менее 12 изменений на каждую страницу, и я не могу откатить их 12 изменений назад.

3 ответа3

5

Вы всегда можете просто восстановить свою базу данных из резервной копии, верно?

Методы возврата на meta.wikimeda.org должны работать, но, как вы заметили , на тоннах страниц это не улетит.

Я думаю, вы могли бы вручную войти в базу данных MySQL и очистить ее до появления спам-ботов, но я не уверен, как это будет работать.

1

Основываясь на SQL-запросах Стана Соколова, мне удалось устранить ужасный беспорядок в моей вики - я не наблюдал за ним в течение полугода, и он был полон спама. Я должен был очистить его от конкретной даты.

Если вы собираетесь попробовать то же самое, пожалуйста, сделайте резервную копию в первую очередь - эти SQL-запросы могут разрушить вашу вики, убить котят и вызвать беременность.

В этом примере "tr_" - мой префикс, "189" - последний хороший идентификатор страницы, "41" - последний хороший идентификатор пользователя, а "20130215152547" - первая дата входа в спам.

#Update page state to last good before the date
UPDATE tr_page p SET p.page_latest=( SELECT MAX(r.rev_id) FROM tr_revision r 
WHERE r.rev_page=p.page_id 
AND rev_timestamp <20130215152547) WHERE p.page_id IN 
(SELECT  r2.rev_page FROM tr_revision r2 WHERE rev_timestamp >=20130215152547);

#Update page length to match actual
UPDATE tr_page p SET p.page_len=( SELECT r.rev_len FROM tr_revision r WHERE
r.rev_page=p.page_id AND r.rev_id=p.page_latest );

#Clean up spam revisions

DELETE FROM tr_revision WHERE rev_timestamp >=20130215152547;

#Clear recent changes

DELETE FROM tr_recentchanges WHERE rc_timestamp >=20130215152547;

#Block all new bad users from ever entering wiki with this login
UPDATE tr_user SET
  user_password    = '',
  user_newpassword = '',
  user_email       = '',
  user_token       = ''
WHERE user_id>41;

#Delete pages, staring from the last good id
DELETE FROM tr_page WHERE page_id>189;

#Also, you will need TO clean TABLE tr_pagelinks.
#You will have to do it manually. It's easy, use some editor
#like PHPMyAdmin or SQLyog

#Clean cache

DELETE FROM `tr_objectcache`;
DELETE FROM `tr_querycache`;
DELETE FROM `tr_querycachetwo`;
0

http://www.mediawiki.org/wiki/Extension:Nuke - это расширение, которое позволяет удалять все страницы, созданные пользователем /IP. Сценарий JS, упомянутый в комментарии Hello71, позволяет откатить все изменения от определенного пользователя. При совместном использовании это работает довольно хорошо.

Для вашего конкретного случая 12 изменений на каждой странице от нескольких ботов, я не знаю, насколько хорошо это можно обработать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .