Eliminación masiva de revisiones de spam en Mediawiki

15

Básicamente, mi instancia de 'mediawiki' privada 'era casi tan segura como una alcancía de niños pequeños. Lo he reforzado ahora, pero me quedan unas cien páginas nuevas y revisiones generadas por cientos de usuarios generados al azar.

Pregunta de 2 partes; ¿Hay alguna forma de eliminar todas las páginas huérfanas? ¿Puedo decir que revierta todas las revisiones NO realizadas por un usuario en particular (yo)?

Andrew Bolster
fuente
Ya no tengo ese problema con mi sitio web mediawiki. Si todavía tiene este problema, responda a mi comentario y puedo mostrarle en una transmisión en vivo cómo soluciono estos problemas.
jehovahsays

Respuestas:

19

Si no desea utilizar el método de exportación y reinstalación sugerido por danlefree , también puede encontrar útil la extensión Nuke . Una vez instalado, visitando la página especial Especial: Nuke como administrador le ofrece un formulario como este:

Captura de pantalla de la interfaz de extensión MediaWiki Nuke

También hay varios scripts de mantenimiento de MediaWiki integrados que podrían ser útiles, que incluyen:

  • cleanupSpam.php , que puede usarse para deshacer y / o eliminar todas las revisiones que contienen un enlace a un nombre de host en particular,

  • deleteBatch.php , que se puede usar para eliminar todas las páginas enumeradas en un archivo, y

  • rollbackEdits.php (que actualmente no parece tener la documentación adecuada en wiki), que se puede usar para revertir todas las ediciones de un usuario específico.


Limpieza de spam usando acceso directo a la base de datos

También es posible hacer lo que quiera manipulando directamente la base de datos. Los detalles pueden variar un poco dependiendo de su situación, pero los pasos básicos serían más o menos así:

  1. Configura tu wiki en modo de solo lectura . Usted no quiere que alguien intente editar el wiki, mientras te estás metiendo con la base de datos.

  2. Haz una copia de seguridad de tu wiki. (Esto es muy recomendable antes de cualquier eliminación masiva irreversible de todos modos).

  3. Eliminar todas las cuentas de usuario creadas por los spammers. Si, como en la pregunta anterior, usted era el único usuario válido, puede hacer lo siguiente:

    DELETE FROM user WHERE user_id != YOUR_USER_ID;

    Alternativamente, si no se crearon nuevas cuentas válidas después de que los spammers descubrieron el wiki, puede encontrar el número de ID de usuario válido más alto y hacer:

    DELETE FROM user WHERE user_id > LAST_VALID_USER_ID;

    O puede usar una herramienta de administración como phpMyAdmin para seleccionar manualmente las cuentas válidas y eliminar el resto.

  4. Limpie los datos adicionales asociados con las cuentas eliminadas. Esto no es estrictamente necesario, pero esos registros huérfanos no tienen uso y solo saturarán su base de datos si no los elimina:

    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. Elimine cualquier revisión que no haya realizado un usuario válido:

    Este es el gran paso; todo antes de la preparación, todo después de la limpieza. Con todas las cuentas de spam eliminadas, simplemente puede hacer:

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

    Si su wiki tenía deshabilitada la edición anónima (que recomiendo encarecidamente para los wikis privados / de prueba), la consulta anterior debería ser suficiente para deshacerse de todas las revisiones de spam. Sin embargo, si tenía habilitada la edición anónima , tendrá que eliminar el spam anónimo por separado.

    Si está seguro de que todas las ediciones anon en su wiki son spam, las únicas ediciones realizadas por UID 0 que podemos necesitar preservar son aquellas hechas por MediaWiki (como páginas importadas desde fuera de la wiki). En ese caso, algo como la siguiente consulta debería funcionar:

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

    Esto eliminará cualquier revisión por UID 0 donde el nombre de usuario se ve (vagamente) como una dirección IPv4; es decir, comienza con un dígito entre 1 y 9.

    Si su wiki tiene algunas ediciones anónimas legítimas, es posible que tenga que ser un poco más creativo. Si el número de direcciones IP utilizadas por editores legítimos no registrados es limitado, puede agregar una cláusula como AND rev_user_text NOT IN ('1.2.3.4', '5.6.7.8', '9.10.11.12')la consulta anterior para excluir las contribuciones de esas IP de la eliminación. También puede agregar condiciones como, por ejemplo, AND rev_user_text NOT LIKE '192.168.%'guardar todas las ediciones de direcciones IP que comienzan con un prefijo particular.

  6. Las consultas anteriores eliminarán las revisiones de correo no deseado (aunque su contenido seguirá en la texttabla), pero dejarán el page_latestcampo de las páginas afectadas apuntando a una revisión inexistente. Esto podría causar confusión, así que será mejor que lo arreglemos.

    Primero, necesitamos borrar la page_latestcolumna de todas las páginas:

    UPDATE page SET page_latest = 0;
  7. A continuación, reconstruiremos la columna, ya sea ejecutando el script de mantenimiento attachLatest.php (recomendado; recuerde usar el --fixparámetro para que el script realmente cambie la base de datos) o con una consulta SQL manual:

    UPDATE page SET page_latest =
        (SELECT MAX(rev_id) FROM revision WHERE rev_page = page_id);
  8. Finalmente, eliminaremos todas las páginas para las que no se pudieron encontrar revisiones válidas (porque fueron creadas por spammers y nunca tuvieron ningún contenido válido):

    DELETE FROM page WHERE page_latest = 0;
  9. Para un toque final, reconstruya los enlaces, el índice de texto y las tablas de cambios recientes ejecutando el script de mantenimiento rebuildall.php . También es posible que desee eliminar el contenido de las revisiones de spam eliminadas de la base de datos, para que no ocupen espacio innecesario allí, ejecutando el script de mantenimiento purgeOldText.php .

Una vez que todo esté listo, verifique que todo se vea bien y, de ser así, apague el modo de solo lectura, con suerte después de instalar algunas funciones antispam para evitar que el problema vuelva a ocurrir.

Para wikis pequeños, recomiendo la extensión QuestyCaptcha , que le permite configurar un CAPTCHA basado en texto personalizado simple. El truco es que, dado que cada wiki tiene su propio conjunto de preguntas, programar un robot de spam para responderlas correctamente sería mucho trabajo con muy poca ganancia. Lo instalé en mi propio wiki después de ser golpeado por XRumer un par de veces, y desde entonces no he visto ningún correo no deseado.

PD. He usado estas instrucciones para eliminar casi 35,000 revisiones de spam creadas por muchos usuarios de una pequeña wiki . Todo salió bien. En este caso particular, el wiki (¡afortunadamente!) No permitía la edición anónima, y ​​casi todos los usuarios legítimos fueron creados antes de que los spammers encontraran el wiki, por lo que podría eliminar fácilmente todas las cuentas de spam, y luego todas las revisiones Ellos habían creado. (Al principio, eliminé accidentalmente una cuenta legítima, así que tuve que restaurar desde la copia de seguridad y rehacer el proceso con más cuidado). He actualizado las instrucciones anteriores para reflejar mejor lo que realmente terminé haciendo y ser un poco más genérico .

Ilmari Karonen
fuente
Esta pregunta tiene un par de años, todavía parece haber funcionado bien en una pequeña wiki que había acumulado 100,000 bots de spam. Han cambiado las cosas desde entonces; ¿hay tal vez pasos adicionales?
Ant6n
¿Alguna noticia aquí? ¿Estas son las "mejores prácticas" y las "mejores herramientas" en la actualidad?
Peter Krauss
rebuildall.phpno está en mantenimiento: O De lo contrario, gracias
Jamie Hutber
5

La forma más fácil de manejar esta situación (si no le importa un nuke'n'pave) sería exportar todas las páginas wiki creadas o editadas por su nombre de usuario, reinstalar la wiki e importar el archivo de exportación que había generado.

"Reinstalar" en este contexto significaría:

  1. Exportar artículos creados por usted (presumiblemente conectado como usuario de WikiSysop o similar)
  2. Descarte la base de datos MW
  3. Crear una base de datos MW vacía
  4. Copie su LocalSettings.phparchivo a una ubicación segura
  5. Vuelva a cargar el /config/directorio
  6. Ejecute el proceso de instalación en la nueva base de datos MW (tenga en cuenta que querrá volver a crear su antiguo usuario administrador)
  7. Elimine el /config/directorio y mueva su LocalSettings.phparchivo anterior a la raíz MW
  8. Importe el archivo creado en el Paso 1

Editar: es posible que desee desplegar una copia de seguridad de la base de datos (incluidas las revisiones de correo no deseado) en caso de que encuentre algún problema con este proceso o si desea experimentar con formas alternativas de purgar el correo no deseado.

danlefree
fuente
2

En teoría, podría escribir una extensión de MediaWiki para hacer lo que quiera en una instancia de MediaWiki, incluso para hacer las cosas que mencionó.

Aparte de eso, y menos del "nuke'n'pave" sugerido por danlefree, puede encontrar útil la extensión User Merge and Delete : puede usarla para consolidar múltiples cuentas de spambot en una sola cuenta cuyas ediciones pueden abordarse más fácilmente.

sampablokuper
fuente
2

La forma más fácil de manejar esta situación es instalar la extensión DeleteBatch . Use Special: AllPages en su wiki para obtener un archivo de script de los nombres de página que desea eliminar y cárguelo en Special: DeleteBatch.

Rob Kam
fuente
1

Si solo son cien páginas de spam, no lo estás haciendo tan mal. Tuve que limpiar una wiki que tenía miles de páginas de spam. Encontré algunos buenos consejos del Usuario: Halz en esta página: https://www.mediawiki.org/wiki/User:Halz/Mass_despamming, incluido un desglose de las limitaciones de las diversas herramientas.

En la parte inferior, ha proporcionado una útil consulta SQL que se ejecuta un poco lento pero que le ayuda a encontrar páginas que probablemente sean spam, especialmente si puede identificar el período de tiempo en que los creadores de spam tomaron el wiki. Halz también tiene una versión pirateada de Extension: Nuke que presenta este tipo de parámetros de consulta para una eliminación masiva fácil. Me dio una copia para usar, pero no creo que la haya publicado.

Harry Wood
fuente
1

¡Recomiendo no meterse con el SQL de MediaWiki! MediaWiki es una bestia compleja, muy optimizada para Wikipedia. Hay algunas cosas extrañas que suceden en SQL y si simplemente BORRAS filas, las cosas podrían perder consistencia.

Si tienes algunas habilidades de programación, ve a través de la API. Pywikibot es una buena opción.

De lo contrario, verifique las herramientas en el maintenance/directorio. Podrías probar mi propia herramienta, mewsh para ayudar con eso (y acabo de agregar "herramientas anti-spam" como un todo allí).

Fifi Finance
fuente
0

Me hice cargo de una instalación y encontré más de 47,000 entradas de spam en la usertabla y casi 900,000 de spam externallinks. Solía Sequel Pro y visitó cada mesa y borren las entradas de los usuarios que no sea auténtico. He encontrado spam en el externallinks, page, searchindex, user, watchlist. Fue bastante eficiente en el tiempo; La mayor parte de mi tiempo estaba esperando que se ejecutaran las consultas de eliminación. Tuve suerte porque la mayoría de las ediciones auténticas ocurrieron temprano en el orden de las cosas.

ow3n
fuente
2
No tiene sentido tratar de eliminar enlaces de spam externallinks, ya que esa es una tabla de metadatos redundante que básicamente solo se usa para cosas como Especial: LinkSearch; Una vez que haya limpiado las páginas reales, puede simplemente ejecutar rebuildall.phppara borrarlas y reconstruirlas. Lo mismo para searchindex.
Ilmari Karonen