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:
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.
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);
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.
Las consultas anteriores eliminarán las revisiones de correo no deseado (aunque su contenido seguirá en la text
tabla), pero dejarán el page_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:
UPDATE page SET page_latest = 0;
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:
UPDATE page SET page_latest =
(SELECT MAX(rev_id) FROM revision WHERE rev_page = page_id);
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;
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.