Suppression massive de révisions de spam dans Mediawiki

15

Fondamentalement, mon instance mediawiki «privée» était à peu près aussi sécurisée qu'une tirelire pour tout-petits. Je l'ai resserré maintenant, mais il me reste environ une centaine de nouvelles pages et révisions générées par des centaines d'utilisateurs générés aléatoirement.

Question en 2 parties; Existe-t-il un moyen de supprimer toutes les pages orphelines? Puis-je demander d'annuler toutes les révisions NON effectuées par un utilisateur particulier (moi)?

Andrew Bolster
la source
Je n'ai plus ce problème avec mon site Web MediaWiki. Si vous rencontrez toujours ce problème, répondez à mon commentaire et je peux vous montrer en direct comment résoudre ces problèmes.
jehovah dit le

Réponses:

19

Si vous ne souhaitez pas utiliser la méthode d'exportation et de réinstallation suggérée par danlefree , vous pouvez également trouver l' extension Nuke utile. Une fois installé, visitez la page spéciale Special: Nuke en tant qu'administrateur vous donne un formulaire comme celui-ci:

Capture d'écran de l'interface d'extension de MediaWiki Nuke

Il existe également plusieurs scripts de maintenance MediaWiki intégrés qui pourraient être utiles, notamment:

  • cleanupSpam.php , qui peut être utilisé pour restaurer et / ou supprimer toutes les révisions contenant un lien vers un nom d'hôte particulier,

  • deleteBatch.php , qui peut être utilisé pour supprimer toutes les pages répertoriées dans un fichier, et

  • rollbackEdits.php (qui ne semble pas actuellement avoir une documentation appropriée sur le wiki), qui peut être utilisé pour annuler toutes les modifications d'un utilisateur spécifié.


Nettoyage du spam à l'aide d'un accès direct à la base de données

Il est également possible de faire ce que vous voulez en manipulant directement la base de données. Les détails peuvent varier un peu en fonction de votre situation, mais les étapes de base se présenteraient comme suit:

  1. Réglez votre wiki en mode lecture seule . Vous ne voulez pas que quelqu'un essaie de modifier le wiki pendant que vous jouez avec la base de données.

  2. Faites une sauvegarde de votre wiki. (Ceci est fortement recommandé avant toute suppression de masse irréversible de toute façon.)

  3. Supprimez tous les comptes d'utilisateurs créés par les spammeurs. Si, comme dans la question ci-dessus, vous étiez le seul utilisateur valide, vous pouvez simplement faire:

    DELETE FROM user WHERE user_id != YOUR_USER_ID;

    Alternativement, si aucun nouveau compte valide n'a été créé après que les spammeurs ont découvert le wiki, vous pouvez trouver le numéro d'ID utilisateur valide le plus élevé et faire:

    DELETE FROM user WHERE user_id > LAST_VALID_USER_ID;

    Ou vous pouvez utiliser un outil d'administration comme phpMyAdmin pour sélectionner manuellement les comptes valides et supprimer les autres.

  4. Nettoyez les données supplémentaires associées aux comptes supprimés. Ce n'est pas strictement nécessaire, mais ces enregistrements orphelins n'ont aucune utilité et ne feront qu'encombrer votre base de données si vous ne les supprimez pas:

    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. Supprimez toutes les révisions non effectuées par un utilisateur valide:

    C'est le grand pas; tout avant la préparation, tout après le nettoyage. Avec tous les comptes de spam supprimés, vous pouvez simplement faire:

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

    Si votre wiki avait désactivé l'édition anonyme (ce que je recommande fortement pour les wikis privés / de test), la requête ci-dessus devrait être suffisante pour se débarrasser de toutes les révisions de spam. Si vous aviez activé la modification, vous devrez neutraliser le spam anonyme séparément.

    Si vous êtes sûr que toutes les modifications anon sur votre wiki sont du spam, les seules modifications apportées par l'UID 0 que nous pourrions avoir besoin de conserver sont celles effectuées par MediaWiki lui-même (telles que les pages importées de l'extérieur du wiki). Dans ce cas, quelque chose comme la requête suivante devrait fonctionner:

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

    Cela supprimera toutes les révisions de l'UID 0 où le nom d'utilisateur ressemble (vaguement) à une adresse IPv4; c'est-à-dire qu'il commence par un chiffre compris entre 1 et 9.

    Si votre wiki contient des modifications anon légitimes, vous devrez peut-être faire preuve d'un peu plus de créativité. Si le nombre d'adresses IP utilisées par des éditeurs légitimes non enregistrés est limité, vous pouvez simplement ajouter une clause similaire AND rev_user_text NOT IN ('1.2.3.4', '5.6.7.8', '9.10.11.12')à la requête ci-dessus pour exclure les contributions de ces adresses IP de la suppression. Vous pouvez également ajouter des conditions telles que, par exemple, AND rev_user_text NOT LIKE '192.168.%'pour enregistrer toutes les modifications des adresses IP commençant par un préfixe particulier.

  6. Les requêtes ci-dessus supprimeront les révisions de spam (bien que leur contenu restera toujours dans le texttableau), mais laissera le page_latestchamp de toutes les pages affectées pointant vers une révision inexistante. Cela pourrait provoquer de la confusion, nous ferions donc mieux de le réparer.

    Tout d'abord, nous devons effacer la page_latestcolonne pour toutes les pages:

    UPDATE page SET page_latest = 0;
  7. Ensuite, nous reconstruirons la colonne, soit en exécutant le script de maintenance attachLatest.php (recommandé; n'oubliez pas d'utiliser le --fixparamètre pour que le script change réellement la base de données) ou avec une requête SQL manuelle:

    UPDATE page SET page_latest =
        (SELECT MAX(rev_id) FROM revision WHERE rev_page = page_id);
  8. Enfin, nous supprimerons toutes les pages pour lesquelles aucune révision valide n'a pu être trouvée (car elles ont été créées par des spammeurs et n'ont jamais eu de contenu valide):

    DELETE FROM page WHERE page_latest = 0;
  9. Pour une touche finale, reconstruisez les liens, l'index de texte et les tables de modifications récentes en exécutant le script de maintenance rebuildall.php . Vous pouvez également supprimer le contenu des révisions de spam supprimées de la base de données, afin qu'elles n'y occupent pas d'espace inutile, en exécutant le script de maintenance purgeOldText.php .

Une fois que tout est terminé, vérifiez que tout semble correct et, dans l'affirmative, désactivez le mode lecture seule - espérons-le après avoir installé certaines fonctionnalités anti-spam pour éviter que le problème ne se reproduise.

Pour les petits wikis, je recommande fortement l' extension QuestyCaptcha , qui vous permet de configurer un simple CAPTCHA basé sur du texte personnalisé. L'astuce est que, avec chaque wiki ayant son propre ensemble de questions, programmer un spambot pour y répondre correctement serait beaucoup de travail pour très peu de gain. Je l'ai installé sur mon propre wiki après avoir été touché par XRumer plusieurs fois, et je n'ai plus vu de spam depuis.

Ps. J'ai utilisé ces instructions pour supprimer environ 35 000 révisions de spam créées par autant d'utilisateurs à partir d' un petit wiki . Tout s'est bien passé. Dans ce cas particulier, le wiki (heureusement!) Ne permettait pas la modification anonyme, et presque tous les utilisateurs légitimes ont été créés avant que les spammeurs ne trouvent le wiki, donc je pouvais assez facilement d'abord supprimer tous les comptes de spam, puis toutes les révisions ils avaient créé. (J'ai d'abord accidentellement supprimé un compte légitime, j'ai donc dû restaurer à partir de la sauvegarde et refaire le processus plus soigneusement.) J'ai mis à jour les instructions ci-dessus pour mieux refléter ce que j'ai fini par faire et pour être un peu plus générique .

Ilmari Karonen
la source
Cette question a quelques années, elle semble toujours avoir bien fonctionné sur un petit wiki qui avait accumulé 100 000 robots de spam. Les choses ont-elles changé depuis? y a-t-il peut-être des étapes supplémentaires?
Ant6n
Des nouvelles ici? Ce sont les "meilleures pratiques" et les "meilleurs outils" de nos jours?
Peter Krauss
rebuildall.phpn'est pas en maintenance: O Sinon merci
Jamie Hutber
5

Le moyen le plus simple de gérer cette situation (si cela ne vous dérange pas) est d'exporter toutes les pages wiki créées ou modifiées par votre nom d'utilisateur, de réinstaller le wiki et d'importer le fichier d'exportation que vous avez généré.

"Réinstaller" dans ce contexte signifierait:

  1. Exporter des articles créés par vous (probablement connecté en tant qu'utilisateur WikiSysop ou similaire)
  2. Supprimez la base de données MW
  3. Créer une base de données MW vide
  4. Copiez votre LocalSettings.phpfichier dans un endroit sûr
  5. Re-télécharger le /config/répertoire
  6. Exécutez le processus d'installation sur la nouvelle base de données MW (notez que vous souhaiterez recréer votre ancien utilisateur administrateur)
  7. Supprimez le /config/répertoire et déplacez votre ancien LocalSettings.phpfichier vers la racine MW
  8. Importez le fichier créé à l'étape 1

Modifier: vous souhaiterez peut-être supprimer une sauvegarde de la base de données (y compris les révisions de spam) au cas où vous rencontriez des problèmes avec ce processus ou souhaitiez expérimenter d'autres moyens de purger le spam.

danlefree
la source
2

En théorie, vous pourriez écrire une extension MediaWiki pour faire ce que vous voulez dans une instance MediaWiki, y compris pour faire les choses que vous avez mentionnées.

En dehors de cela et du "nuke'n'pave" suggéré par danlefree, vous pouvez trouver l' extension User Merge and Delete utile: vous pouvez l'utiliser pour consolider plusieurs comptes de spambot en un seul compte dont les modifications peuvent ensuite être traitées plus facilement.

sampablokuper
la source
2

La façon la plus simple de gérer cette situation consiste à installer l'extension DeleteBatch . Utilisez Special: AllPages sur votre wiki pour obtenir un fichier de script des noms de page que vous souhaitez supprimer et chargez-le dans Special: DeleteBatch.

Rob Kam
la source
1

Si ce n'est qu'une centaine de pages de spam, vous ne faites pas trop mal. J'ai dû nettoyer un wiki qui avait des milliers de pages spammées. J'ai trouvé quelques bons conseils par l'utilisateur: Halz sur cette page: https://www.mediawiki.org/wiki/User:Halz/Mass_despamming, y compris une ventilation des limitations des différents outils.

En bas, il a fourni une requête SQL utile qui s'exécute un peu lentement mais vous aide à trouver les pages qui sont le plus probablement du spam, en particulier si vous pouvez identifier la période de temps où le wiki a été pris en charge par les spammeurs. Halz a également une version piratée d'Extension: Nuke qui présente ces types de paramètres interrogeables pour une suppression de masse facile. Il m'en a donné un exemplaire à utiliser, mais je ne pense pas qu'il l'ait publié.

Harry Wood
la source
1

Je recommande fortement de ne pas jouer avec le SQL de MediaWiki! MediaWiki est une bête complexe, très optimisée pour Wikipedia. Il y a des choses étranges qui se passent dans SQL et si vous SUPPRIMEZ simplement les lignes, les choses pourraient perdre leur cohérence.

Si vous avez des compétences en programmation, passez par l'API. Pywikibot est un bon choix.

Sinon, vérifiez les outils dans le maintenance/répertoire. Vous pouvez essayer mon propre outil, mewsh pour vous y aider (et je viens d'ajouter des "outils anti-spam" comme tâche).

kqw
la source
0

J'ai repris une installation et trouvé plus de 47 000 entrées de spam dans le usertableau et près de 900 000 spam externallinks. J'ai utilisé Sequel Pro et visité chaque table et supprimé les entrées non effectuées par des utilisateurs authentiques. J'ai trouvé le spam dans externallinks, page, searchindex, user, watchlist. C'était assez rapide; la majeure partie de mon temps attendait l'exécution des requêtes de suppression. J'ai eu de la chance car la plupart des modifications authentiques se sont produites tôt dans l'ordre des choses.

ow3n
la source
2
Il externallinksne sert à rien d' essayer de supprimer les liens de spam , car il s'agit d'une table de métadonnées redondante qui est essentiellement utilisée uniquement pour des choses comme Special: LinkSearch; une fois que vous avez nettoyé les pages réelles, vous pouvez simplement exécuter rebuildall.phppour les nettoyer et les reconstruire. Idem pour searchindex.
Ilmari Karonen