web-dev-qa-db-fra.com

Suppression en masse des révisions de spam dans Mediawiki

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

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

15
Andrew Bolster

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:

Screenshot of MediaWiki Nuke extension interface

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

  • cleanupSpam.php , qui peut être utilisé pour annuler 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 avoir la documentation appropriée sur le wiki), qui peut être utilisé pour annuler toutes les éditions d'un utilisateur spécifié.


Nettoyage du spam en utilisant 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 voici les étapes de base:

  1. Définissez votre wiki sur mode lecture seule . Vous ne voulez pas que quelqu'un essaye de modifier le wiki pendant que vous manipulez la base de données.

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

  3. Supprimer 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;
    _

    Sinon, si aucun nouveau compte valide n'a été créé après que les spammeurs aient découvert le wiki, vous pouvez trouver le numéro d'identification d'utilisateur valide le plus élevé et effectuer les opérations suivantes:

    _DELETE FROM user WHERE user_id > LAST_VALID_USER_ID;
    _

    Ou vous pouvez utiliser un outil d'administration tel que phpMyAdmin pour sélectionner manuellement les comptes valides et supprimer le reste.

  4. Nettoyez les données supplémentaires associées aux comptes supprimés. Ce n'est pas strictement nécessaire, mais ces enregistrements orphelins ne servent à rien et encombreront simplement 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 l'édition anonyme est désactivée sur votre wiki (ce que je recommande vivement pour les wikis privés/de test), la requête ci-dessus devrait suffire à supprimer toutes les révisions de spam. Cependant, si vous aviez activé l'édition sur Internet, vous devrez supprimer le spam anonyme séparément.

    Si vous êtes sûr que toutes les modifications anon de votre wiki sont du spam, les seules modifications apportées par l'UID 0 que nous devrons peut-être préserver sont celles de MediaWiki lui-même (telles que les pages). importé 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 comporte 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 les éditeurs légitimes non inscrits est limité, vous pouvez simplement ajouter une clause telle que 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 de la suppression les contributions de ces adresses IP. Vous pouvez également ajouter des conditions telles que, par exemple, _AND rev_user_text NOT LIKE '192.168.%'_ pour enregistrer toutes les modifications d’adresses IP commençant par un préfixe particulier.

  6. Les requêtes ci-dessus suppriment les révisions de spam (bien que leur contenu reste dans la table text), mais laisse le champ page_latest de toutes les pages affectées pointant vers une révision inexistante. Cela pourrait semer la confusion et nous ferions mieux de le réparer.

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

    _UPDATE page SET page_latest = 0;
    _
  7. Ensuite, nous reconstruirons la colonne en exécutant le script de maintenance attachLatest.php (recommandé; pensez à utiliser le paramètre _--fix_ pour que le script modifie réellement la base de données), ou avec un script de maintenance. 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 été 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 dernière touche, 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 vouloir supprimer le contenu des révisions de spam supprimées de la base de données afin qu'elles ne prennent pas d'espace inutile là-dessus, en exécutant le script de maintenance purgeOldText.php .

Une fois que tout est terminé, vérifiez que tout semble bien, et si tel est le cas, désactivez le mode lecture seule - si tout va bien après l'installation de fonctionnalités anti-spam pour éviter que le problème ne se reproduise.

Pour les petits wikis, je recommande vivement l’extension QuestyCaptcha , qui vous permet de configurer un simple CAPTCHA en mode texte personnalisé. Le truc, c’est que, chaque wiki ayant son propre ensemble de questions, programmer un spambot pour y répondre correctement représenterait beaucoup de travail pour un gain minime. Je l'ai installé sur mon propre wiki après avoir été touché plusieurs fois par XRumer , et je n'ai vu aucun spam depuis.

Ps. J'ai utilisé ces instructions pour supprimer environ 35 000 révisions de spam créées par autant d'utilisateurs de n petit wiki . Tout s'est bien passé. Dans ce cas particulier, le wiki (heureusement!) N'autorisait pas l'édition anonyme, et presque tous les utilisateurs légitimes avaient été créés avant que les spammeurs ne trouvent le wiki, ce qui m'a permis de supprimer assez facilement tous les comptes de spam, puis toutes les révisions. ils avaient créé. (Au départ, j’ai accidentellement supprimé un compte légitime, j’ai donc dû restaurer la sauvegarde et redéfinir le processus plus attentivement.) J'ai mis à jour les instructions ci-dessus pour mieux refléter ce que j’ai finalement fait et pour être un peu plus générique. .

19
Ilmari Karonen

Le moyen le plus simple de gérer cette situation (si un armement nucléaire ne vous dérange pas) serait d’exporter toutes les pages du 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 aviez généré.

"Réinstaller" dans ce contexte signifierait:

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

Edit: Vous voudrez peut-être extraire une sauvegarde de base de données (y compris les révisions de spam) au cas où vous rencontriez des problèmes avec ce processus ou souhaitez expérimenter d'autres méthodes pour éliminer le spam.

5
danlefree

En théorie, vous pouvez écrire une extension MediaWiki pour faire ce que vous voulez sur une instance de MediaWiki, y compris pour faire ce que vous avez mentionné.

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

2
sampablokuper

Le moyen le plus simple de gérer cette situation est d'installer l'extension DeleteBatch . Utilisez Special: AllPages sur votre wiki pour obtenir un fichier de script contenant les noms de page à supprimer et chargez-le dans Special: DeleteBatch.

2
Rob Kam

Je recommande fortement de ne pas gâcher le SQL de MediaWiki! MediaWiki est une bête complexe, très optimisée pour Wikipedia. Il se passe des choses étranges dans SQL et si vous supprimez simplement des lignes, cela risque de perdre de la 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 répertoire maintenance/. Vous pouvez essayer mon propre outil, mewsh pour vous aider (et je viens d'ajouter "des outils anti-spam" en tant que liste de tâches).

1
guaka

Si ce n'est que cent pages de spam, vous ne vous en tirez pas trop mal. Je devais nettoyer un wiki qui contenait des milliers de pages spammées. J'ai trouvé quelques bons conseils de l'utilisateur: Halz sur cette page: https://www.mediawiki.org/wiki/User:Halz/Mass_despamming avec une ventilation des limitations des différents outils.

En bas, il fournit une requête SQL utile qui s'exécute un peu lentement mais qui vous aide à trouver les pages les plus susceptibles d'être du spam, en particulier si vous pouvez identifier la période pendant laquelle le wiki a été repris par des spammeurs. Halz propose également une version piratée de Extension: Nuke, qui présente ces types de paramètres pouvant être interrogés pour une suppression facile en masse. Il m'a donné une copie à utiliser, mais je ne pense pas qu'il l'a publiée.

1
Harry Wood

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

0
ow3n