Basicamente, minha instância do mediawiki 'privada' era tão segura quanto um cofrinho de crianças pequenas. Eu o endureci agora, mas fiquei com cerca de cem novas páginas e revisões geradas por centenas de usuários gerados aleatoriamente.
Questão de 2 partes; Existe uma maneira de excluir todas as páginas órfãs? Posso dizer para reverter todas as revisões que NÃO foram feitas por um usuário em particular?
Respostas:
Se você não quiser usar o método de exportação e reinstalação sugerido por danlefree , também poderá achar útil a extensão Nuke . Depois de instalado, visite a página especial Especial: Nuke como administrador, fornece um formulário como este:
Existem também vários scripts de manutenção do MediaWiki que podem ser úteis, incluindo:
cleanupSpam.php , que pode ser usado para reverter e / ou excluir todas as revisões que contêm um link para um nome de host específico,
deleteBatch.php , que pode ser usado para excluir todas as páginas listadas em um arquivo, e
rollbackEdits.php (que atualmente não parece ter a documentação adequada no wiki), que pode ser usada para reverter todas as edições de um usuário especificado.
Limpeza de spam usando acesso direto ao banco de dados
Também é possível fazer o que você deseja, manipulando diretamente o banco de dados. Os detalhes podem variar um pouco, dependendo da sua situação, mas as etapas básicas seriam algo como isto:
Defina seu wiki para o modo somente leitura . Você não quer que alguém tente editar o wiki enquanto estiver mexendo com o banco de dados.
Faça um backup do seu wiki. (Isso é altamente recomendado antes de qualquer exclusão em massa irreversível.)
Exclua todas as contas de usuário criadas pelos remetentes de spam. Se, como na pergunta acima, você era o único usuário válido, basta:
Como alternativa, se nenhuma nova conta válida foi criada depois que os remetentes de spam descobriram o wiki, você pode encontrar o maior número de ID de usuário válido e fazer:
Ou você pode usar uma ferramenta administrativa como o phpMyAdmin para escolher manualmente as contas válidas e excluir o restante.
Limpe os dados extras associados às contas excluídas. Isso não é estritamente necessário, mas esses registros órfãos não têm utilidade e apenas desorganizam o banco de dados se você não os excluir:
Exclua as revisões não feitas por um usuário válido:
Este é o grande passo; tudo antes da preparação, tudo depois da limpeza. Com todas as contas de spam excluídas, você pode simplesmente:
Se o seu wiki teve a edição anônima desativada (o que eu recomendo fortemente para wikis particulares / de teste), a consulta acima deve ser suficiente para se livrar de todas as revisões de spam. Se você tivesse a edição anon ativada, no entanto, precisará eliminar o spam anônimo separadamente.
Se você tem certeza de que todas as edições anteriores do seu wiki são spam, as únicas edições feitas pelo UID 0 que precisamos preservar são aquelas feitas pelo próprio MediaWiki (como páginas importadas de fora do wiki). Nesse caso, algo como a seguinte consulta deve funcionar:
Isso excluirá quaisquer revisões do UID 0, nas quais o nome de usuário se parece (vagamente) com um endereço IPv4; isto é, começa com um dígito entre 1 e 9.
Se o seu wiki tem algumas edições reais legítimas, você pode precisar ser um pouco mais criativo. Se o número de endereços IP usados por editores não registrados legítimos for limitado, você poderá adicionar uma cláusula semelhante
AND rev_user_text NOT IN ('1.2.3.4', '5.6.7.8', '9.10.11.12')
à consulta acima para excluir as contribuições desses IPs da exclusão. Você também pode adicionar condições como, por exemplo,AND rev_user_text NOT LIKE '192.168.%'
salvar todas as edições dos endereços IP, começando com um prefixo específico.As consultas acima eliminam as revisões de spam (embora seu conteúdo ainda permaneça na
text
tabela), mas deixam opage_latest
campo de todas as páginas afetadas apontando para uma revisão inexistente. Isso pode causar confusão, por isso é melhor corrigi-lo.Primeiro, precisamos limpar a
page_latest
coluna de todas as páginas:Em seguida, reconstruiremos a coluna executando o script de manutenção attachLatest.php (recomendado; lembre-se de usar o
--fix
parâmetro para que o script realmente altere o banco de dados) ou com uma consulta SQL manual:Por fim, excluiremos todas as páginas para as quais não foram encontradas revisões válidas (porque foram criadas por remetentes de spam e nunca tiveram conteúdo válido):
Para um toque final, recrie os links, o índice de texto e as tabelas de alterações recentes executando o script de manutenção rebuildall.php . Você também pode remover o conteúdo das revisões de spam excluídas do banco de dados, para que elas não ocupem espaço desnecessário, executando o script de manutenção purgeOldText.php .
Quando tudo estiver pronto, verifique se tudo está bem e, se estiver, desative o modo somente leitura - depois de instalar alguns recursos anti-spam, para evitar que o problema ocorra novamente.
Para pequenos wikis, recomendo a extensão QuestyCaptcha , que permite configurar um CAPTCHA baseado em texto personalizado simples. O truque é que, com cada wiki tendo seu próprio conjunto de perguntas, programar um spambot para respondê-las corretamente seria muito trabalho com muito pouco ganho. Instalei-o no meu próprio wiki depois de ser atingido pelo XRumer algumas vezes e não vejo spam desde então.
Ps. Eu usei essas instruções para remover cerca de 35.000 revisões de spam criadas por igualmente muitos usuários de um pequeno wiki . Tudo correu bem. Nesse caso em particular, o wiki (felizmente!) Não permitia edição anônima e quase todos os usuários legítimos foram criados antes dos spammers encontrarem o wiki, para que eu pudesse facilmente excluir primeiro todas as contas de spam e depois todas as revisões. eles criaram. (Excluí acidentalmente uma conta legítima no início, portanto tive que restaurar do backup e refazer o processo com mais cuidado.) Atualizei as instruções acima para refletir melhor o que realmente acabei fazendo e para ser um pouco mais genérico. .
fonte
rebuildall.php
Não está em manutenção: O Caso contrário obrigadoA maneira mais fácil de lidar com essa situação (se você não se importa com um nuke'n'pave) seria exportar todas as páginas wiki criadas ou editadas pelo seu nome de usuário, reinstalar a wiki e importar o arquivo de exportação que você gerou.
"Reinstalar" neste contexto significaria:
LocalSettings.php
arquivo para um local seguro/config/
diretório/config/
diretório e mova seuLocalSettings.php
arquivo antigo de volta para a raiz MWEditar: você pode querer fazer um backup do banco de dados (incluindo revisões de spam), caso encontre algum problema com esse processo ou queira experimentar maneiras alternativas de eliminar o spam.
fonte
Em teoria, você pode escrever uma extensão do MediaWiki para fazer o que quiser em uma instância do MediaWiki, inclusive para fazer as coisas mencionadas.
Além disso, além do "nuke'n'pave" sugerido por danlefree, você pode encontrar a extensão User Merge and Delete útil: você pode usá-la para consolidar várias contas spambot em uma única conta cujas edições podem ser abordadas mais facilmente.
fonte
A maneira mais fácil de lidar com essa situação é instalar a extensão DeleteBatch . Use Special: AllPages no seu wiki para obter um arquivo de script com os nomes das páginas que você deseja excluir e carregue-o no Special: DeleteBatch.
fonte
Se são apenas cem páginas com spam, você não está indo muito mal. Eu tive que limpar um wiki que tinha milhares de páginas com spam. Encontrei algumas boas dicas do Usuário: Halz nesta página: https://www.mediawiki.org/wiki/User:Halz/Mass_despamming, incluindo um detalhamento das limitações das várias ferramentas.
Na parte inferior, ele forneceu uma consulta SQL útil, que é um pouco lenta, mas ajuda a encontrar páginas com maior probabilidade de spam, principalmente se você pode identificar o período em que o wiki foi invadido por spammers. Halz também possui uma versão hackeada do Extension: Nuke, que apresenta esses tipos de parâmetros passíveis de consulta para facilitar a exclusão em massa. Ele me deu uma cópia para usar, mas acho que não a publicou.
fonte
Eu recomendo fortemente não mexer com o SQL do MediaWiki! O MediaWiki é um animal complexo, muito otimizado para a Wikipedia. Existem algumas coisas estranhas acontecendo no SQL e, se você simplesmente excluir linhas, as coisas podem perder consistência.
Se você tem algum conhecimento de programação, acesse a API. Pywikibot é uma boa escolha.
Caso contrário, verifique as ferramentas no
maintenance/
diretório Você pode tentar minha própria ferramenta, mewsh , para ajudar com isso (e acabei de adicionar "ferramentas anti-spam" como um todo lá).fonte
Eu assumi a instalação e encontrei mais de 47.000 entradas de spam na
user
tabela e quase 900.000 spamexternallinks
. Usei o Sequel Pro e visitei cada tabela e apaguei as entradas não feitas por usuários autênticos. Eu encontrei o spam emexternallinks
,page
,searchindex
,user
,watchlist
. Foi bastante eficiente em termos de tempo; a maior parte do meu tempo estava aguardando a execução de consultas de exclusão. Tive sorte porque a maioria das edições autênticas aconteceu no início da ordem das coisas.fonte
externallinks
, já que é uma tabela de metadados redundante que é basicamente usada apenas para coisas como Special: LinkSearch; depois de limpar as páginas reais, você pode simplesmente correrrebuildall.php
para limpá-las e reconstruí-las. O mesmo vale parasearchindex
.