Exclusão em massa de revisões de spam no Mediawiki

15

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?

Andrew Bolster
fonte
Não tenho mais esse problema com meu site mediawiki. Se o problema persistir, responda ao meu comentário e eu posso mostrar em uma transmissão ao vivo como soluciono esses problemas.
jehovsays

Respostas:

19

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:

Captura de tela da interface de extensão do MediaWiki Nuke

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:

  1. 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.

  2. Faça um backup do seu wiki. (Isso é altamente recomendado antes de qualquer exclusão em massa irreversível.)

  3. 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:

    DELETE FROM user WHERE user_id != YOUR_USER_ID;

    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:

    DELETE FROM user WHERE user_id > LAST_VALID_USER_ID;

    Ou você pode usar uma ferramenta administrativa como o phpMyAdmin para escolher manualmente as contas válidas e excluir o restante.

  4. 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:

    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. 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:

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

    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:

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

    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.

  6. As consultas acima eliminam as revisões de spam (embora seu conteúdo ainda permaneça na texttabela), mas deixam o page_latestcampo 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_latestcoluna de todas as páginas:

    UPDATE page SET page_latest = 0;
  7. Em seguida, reconstruiremos a coluna executando o script de manutenção attachLatest.php (recomendado; lembre-se de usar o --fixparâmetro para que o script realmente altere o banco de dados) ou com uma consulta SQL manual:

    UPDATE page SET page_latest =
        (SELECT MAX(rev_id) FROM revision WHERE rev_page = page_id);
  8. 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):

    DELETE FROM page WHERE page_latest = 0;
  9. 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. .

Ilmari Karonen
fonte
Essa pergunta tem alguns anos e ainda parece ter funcionado bem em um pequeno wiki que acumulou 100.000 bots de spam. As coisas mudaram desde então; existem talvez etapas adicionais?
Ant6n 31/07/16
Alguma novidade aqui? Essas são as "melhores práticas" e as "melhores ferramentas" hoje em dia?
Peter Krauss
rebuildall.phpNão está em manutenção: O Caso contrário obrigado
Jamie Hutber
5

A 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:

  1. Exportar artigos criados por você (presumivelmente logado como usuário do WikiSysop ou similar)
  2. Solte o banco de dados MW
  3. Crie um banco de dados MW vazio
  4. Copie seu LocalSettings.phparquivo para um local seguro
  5. Carregue novamente o /config/diretório
  6. Execute o processo de instalação no novo banco de dados MW (observe que você deseja recriar seu antigo usuário administrador)
  7. Exclua o /config/diretório e mova seu LocalSettings.phparquivo antigo de volta para a raiz MW
  8. Importe o arquivo criado na Etapa 1

Editar: 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.

danlefree
fonte
2

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.

sampablokuper
fonte
2

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.

Rob Kam
fonte
1

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.

Harry Wood
fonte
1

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á).

fifi finanças
fonte
0

Eu assumi a instalação e encontrei mais de 47.000 entradas de spam na usertabela e quase 900.000 spam externallinks. Usei o Sequel Pro e visitei cada tabela e apaguei as entradas não feitas por usuários autênticos. Eu encontrei o spam em externallinks, 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.

ow3n
fonte
2
Não faz sentido tentar excluir links de spam 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 correr rebuildall.phppara limpá-las e reconstruí-las. O mesmo vale para searchindex.
Ilmari Karonen