По сути, мой «частный» экземпляр в Mediawiki был так же безопасен, как и копилка для малышей. Сейчас я его усилил, но осталось около сотни новых страниц и ревизий, созданных сотнями случайно сгенерированных пользователей.
2 части вопроса; Есть ли способ удалить все потерянные страницы? Могу ли я сказать, чтобы откатить все ревизии, НЕ сделанные определенным пользователем (мной)?
Ответы:
Если вы не хотите использовать метод экспорта и переустановки, предложенный danlefree , вы также можете найти расширение Nuke полезным. После установки посетите специальную страницу Special: Nuke как администратор дает вам такую форму:
Есть также несколько встроенных сценариев обслуживания MediaWiki, которые могут быть полезны, в том числе:
cleanupSpam.php , который можно использовать для отката и / или удаления всех ревизий, содержащих ссылку на определенное имя хоста,
deleteBatch.php , который можно использовать для удаления всех страниц, перечисленных в файле, и
rollbackEdits.php (в настоящее время, похоже, нет соответствующей вики-документации), которую можно использовать для отката всех правок указанного пользователя.
Очистка от спама с использованием прямого доступа к базе данных
Также возможно делать то, что вы хотите, непосредственно манипулируя базой данных. Там детали могут немного отличаться в зависимости от вашей ситуации, но основные шаги будут выглядеть примерно так:
Установите вашу вики в режим только для чтения . Вы не хотите, чтобы кто-то пытался редактировать вики, пока вы возитесь с базой данных.
Сделайте резервную копию вашей вики. (Это настоятельно рекомендуется перед любым необратимым массовым удалением в любом случае.)
Удалить все учетные записи пользователей, созданные спамерами. Если, как и в приведенном выше вопросе, вы были единственным действительным пользователем, вы можете просто сделать:
В качестве альтернативы, если новые действительные учетные записи не были созданы после того, как спамеры обнаружили вики, вы можете найти самый большой действительный идентификационный номер пользователя и сделать:
Или вы можете использовать инструмент администратора, такой как phpMyAdmin, чтобы вручную выбрать действительные учетные записи и удалить остальные.
Очистите лишние данные, связанные с удаленными учетными записями. Это не является строго необходимым, но эти осиротевшие записи бесполезны и будут просто загромождать вашу базу данных, если вы не удалите их:
Удалите все изменения, не сделанные действительным пользователем:
Это большой шаг; все до того, как это было подготовлено, все после того, как это очищено. После удаления всех спам-аккаунтов вы можете просто:
Если в вашей вики отключено анонимное редактирование (что я настоятельно рекомендую для приватных / тестовых вики), то приведенного выше запроса должно быть достаточно, чтобы избавиться от всех версий спама. Если вы включили анонное редактирование, вам придется раздавать анонимный спам отдельно.
Если вы уверены, что все анонимные правки в вашей вики - это спам, единственные правки, сделанные с помощью UID 0, которые нам, возможно, потребуется сохранить, - это изменения, сделанные самим MediaWiki (например, страницы, импортированные извне вики). В этом случае должен работать примерно такой запрос:
Это удалит все ревизии по 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-адресов, начиная с определенного префикса.Приведенные выше запросы избавят от версий спама (хотя их содержание все еще останется в
text
таблице), но оставятpage_latest
поле любых затронутых страниц, указывающих на несуществующую редакцию. Это может вызвать путаницу, поэтому нам лучше это исправить.Во-первых, нам нужно стереть
page_latest
столбец для всех страниц:Далее мы перестроим столбец, запустив сценарий обслуживания attachLatest.php (рекомендуется; не забудьте использовать
--fix
параметр, чтобы скрипт фактически изменял базу данных), или с помощью SQL-запроса вручную:Наконец, мы удалим все страницы, для которых не было найдено действительных ревизий (потому что они были созданы спаммерами и никогда не имели какого-либо действительного контента):
В завершение перестройте таблицы ссылок, текстового индекса и последних изменений, запустив сценарий обслуживания rebuildall.php . Вы также можете удалить содержимое удаленных версий спама из базы данных, чтобы они не занимали там ненужного места, запустив сценарий обслуживания purgeOldText.php .
Как только это будет сделано, убедитесь, что все выглядит хорошо, и если это так, отключите режим только для чтения - надеюсь, после установки некоторых функций защиты от спама, чтобы предотвратить повторение проблемы.
Для небольших вики я настоятельно рекомендую расширение QuestyCaptcha , которое позволяет вам настраивать простую пользовательскую текстовую CAPTCHA. Хитрость в том, что с каждой вики, имеющей свой собственный набор вопросов, программирование спамбота для правильного ответа на них будет большой работой за очень небольшую выгоду. Я установил его на своей вики после того, как пару раз меня ударил XRumer , и с тех пор не видел спама.
Ps. Я использовал эти инструкции, чтобы уничтожить около 35 000 версий спама, созданных столь же многими пользователями из небольшой вики . Все прошло нормально. В этом конкретном случае вики (к счастью!) Не позволяла анонимное редактирование, и почти все законные пользователи были созданы до того, как спаммеры нашли вики, поэтому я мог довольно легко сначала удалить все учетные записи спама, а затем все ревизии они создали. (Сначала я случайно удалил одну легитимную учетную запись, поэтому мне пришлось восстанавливать из резервной копии и более тщательно повторять процесс.) Я обновил приведенные выше инструкции, чтобы лучше отразить то, что я на самом деле делал, и быть более общим ,
источник
rebuildall.php
не в обслуживании: O В противном случае спасибоСамый простой способ справиться с этой ситуацией (если вы не возражаете против использования nuke'n'pave) - это экспортировать все вики-страницы, созданные или отредактированные под вашим именем пользователя, переустановить вики и импортировать созданный вами файл экспорта.
«Переустановить» в этом контексте будет означать:
LocalSettings.php
файл в безопасное место/config/
каталог/config/
каталог и переместите старыйLocalSettings.php
файл обратно в корень MWИзменить: Вы можете захотеть снять резервную копию базы данных (включая версии спама) на случай, если у вас возникнут какие-либо проблемы с этим процессом или вы хотите поэкспериментировать с альтернативными способами очистки от спама.
источник
Теоретически, вы можете написать расширение MediaWiki, чтобы делать все, что вам нравится, с экземпляром MediaWiki, в том числе делать то, что вы упомянули.
Если не считать этого, и если не считать «nuke'n'pave», предложенного danlefree, вы можете найти расширение User Merge and Delete полезным: вы можете использовать его для консолидации нескольких учетных записей spambot в одну учетную запись, к изменениям которой затем можно обратиться с легкостью.
источник
Самый простой способ справиться с этой ситуацией - установить расширение DeleteBatch . Используйте Special: AllPages в вашей вики, чтобы получить файл сценария с именами страниц, которые вы хотите удалить, и загрузить его в Special: DeleteBatch.
источник
Если это всего сто спам-страниц, вы не так уж плохо себя ведете. Я должен был очистить вики, которая имела тысячи спам-страниц. Я наткнулся на несколько хороших советов от пользователя: Halz на этой странице: обнаружил https://www.mediawiki.org/wiki/User:Halz/Mass_despamming, в том числе описание ограничений различных инструментов.
Внизу он предоставил полезный SQL-запрос, который выполняется немного медленно, но помогает вам найти страницы, которые, скорее всего, являются спамом, особенно если вы можете определить период времени, когда вики попали на спамеров. У Halz также есть взломанная версия Extension: Nuke, которая представляет такие типы параметров с возможностью запроса для легкого массового удаления. Он дал мне копию для использования, но я не думаю, что он опубликовал ее.
источник
Я настоятельно рекомендую не связываться с SQL MediaWiki!MediaWiki - сложный зверь, очень оптимизированный для Википедии. В SQL происходят некоторые странные вещи, и если вы просто УДАЛИТЕ строки, вещи могут потерять согласованность.
Если у вас есть навыки программирования, пройдите API. Pywikibot - хороший выбор.
В противном случае проверьте инструменты в
maintenance/
каталоге. Вы можете попробовать мой собственный инструмент, mewsh, чтобы помочь с этим (и я просто добавил «инструменты для защиты от спама» в качестве задачи).источник
Я взял на себя установку и нашел более 47 000 записей спама в
user
таблице и почти 900 000 спамаexternallinks
. Я использовал Sequel Pro и посетил каждую таблицу и удалил записи, сделанные не подлинными пользователями. Я нашел спам вexternallinks
,page
,searchindex
,user
,watchlist
. Это было довольно эффективно по времени; большая часть моего времени ждала выполнения запросов на удаление. Мне повезло, потому что большинство подлинных правок происходило рано в порядке вещей.источник
externallinks
, поскольку это избыточная таблица метаданных, которая в основном используется только для таких вещей, как Special: LinkSearch; как только вы очистите реальные страницы, вы можете просто запустить,rebuildall.php
чтобы стереть и восстановить его. То же самое дляsearchindex
.