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)?
Respuestas:
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:
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í:
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.
Haz una copia de seguridad de tu wiki. (Esto es muy recomendable antes de cualquier eliminación masiva irreversible de todos modos).
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:
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:
O puede usar una herramienta de administración como phpMyAdmin para seleccionar manualmente las cuentas válidas y eliminar el resto.
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:
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:
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:
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.Las consultas anteriores eliminarán las revisiones de correo no deseado (aunque su contenido seguirá en la
text
tabla), pero dejarán elpage_latest
campo 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_latest
columna de todas las páginas:A continuación, reconstruiremos la columna, ya sea ejecutando el script de mantenimiento attachLatest.php (recomendado; recuerde usar el
--fix
parámetro para que el script realmente cambie la base de datos) o con una consulta SQL manual: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):
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 .
fuente
rebuildall.php
no está en mantenimiento: O De lo contrario, graciasLa 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:
LocalSettings.php
archivo a una ubicación segura/config/
directorio/config/
directorio y mueva suLocalSettings.php
archivo anterior a la raíz MWEditar: 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.
fuente
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.
fuente
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.
fuente
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.
fuente
¡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í).fuente
Me hice cargo de una instalación y encontré más de 47,000 entradas de spam en la
user
tabla y casi 900,000 de spamexternallinks
. Solía Sequel Pro y visitó cada mesa y borren las entradas de los usuarios que no sea auténtico. He encontrado spam en elexternallinks
,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.fuente
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 ejecutarrebuildall.php
para borrarlas y reconstruirlas. Lo mismo parasearchindex
.