¿Cayeron cuentas spam en tu instancia de WriteFreely? Arréglalo fácil y rápido
Sigo creyendo que WriteFreely es una buena plataforma de blogs, pero ha tenido un problema bastante grave de seguridad en todas sus versiones hasta el lanzamiento de la 0.17 donde se corrigió, que permitía crear cuentas aunque tu registro estuviera cerrado.
Y yo, como muchas otras instancias, salí afectada con la creación de 3,434 usuarios creados en muy poco tiempo, con publicaciones promocionando plataformas de apuestas con contenido más bien cuestionable. Simples estafas, vaya.
Ni siquiera me quise esperar a traducir los archivos de la interfaz de la nueva versión para actualizar mi instancia, para evitar que siguieran saliendo más cuentas. Y aunque ya se trabaja en una herramienta para la gestión masiva de usuarios desde la línea de comandos, no alcanzó a llegar a la nueva versión. Y la interfaz de administración tampoco permite la administración masiva de usuarios. Y honestamente, qué flojera estar yendo usuario por usuario para estarlos borrando.
Por fortuna, aún podemos utilizar herramientas semiautomatizadas para al menos hacerlo en el menor tiempo posible. Por desgracia, sólo probé esta solución en Linux, así que desconozco si funcione para Mac, y definitivamente tendría qué adaptarse para Windows. Aunque si seguiste mi tutorial de instalación de WriteFreely, seguir con este fix es bastante directo.
Lo primero que tenemos qué hacer es obtener la lista de usuarios creados recientemente, y guardarlo en un archivo de texto. Para ello, ejecutamos el siguiente comando en la terminal.
mariadb -u writefreely -p -e "SELECT username FROM users ORDER BY created DESC" writefreely > usuarios.txt
Y nos pedirá la contraseña de la administración de WriteFreely de cuando creaste tu instancia. Más te vale haberla guardado.
Ahora, en el archivo de texto, estarán ordenados los nombres de usuario, uno por cada línea.

Este archivo se tiene qué refinar, eliminando los nombres de usuario que sí quieres conservar. Como este problema de seguridad es más bien reciente, nos enfocaremos en las primeras líneas, ya que, convenientemente, los usuarios están ordenados desde el más nuevo al más antiguo. Y si tu instancia es sólo para ti (como es mi caso, ya que solo tengo los usuarios del blog en español y en inglés), más sencillo aún.
Una vez hechas tus correcciones, mueve el archivo hasta donde se encuentra el ejecutable de WriteFreely.
mv usuarios.txt /var/www/html/writefreely/
Ahora, crearemos un pequeño script para automatizar la confirmación del borrado de usuarios, ya que por defecto, el comando es interactivo sí o sí.
nano borrar.sh
Dentro, introducimos las siguientes líneas:
#!/bin/bash
echo "Eliminando usuario $1"
echo 'y' | ./writefreely user d $1
Presionamos [Ctrl] + [S] para guardar inmediatamente, y [Ctrl] + [X] para salir.
Finalmente, vamos a ejecutar el comando para eliminar de una vez por todas a esos usuarios molestos.
for usuario in $(cat usuarios.txt); do ./borrar.sh $usuario; done
Al ejecutar este comando, se irán borrando todos los usuarios listados en el archivo de texto. Así que es recomendable revisarlo antes de ejecutar el comando, ya que es irreversible una vez que comienza.
Y... ya. Es todo. Ya terminamos. Con esto ya tenemos limpia nuestra instancia.
Y como no tengo nada más qué decir... yo me largo.
Actualización 20 de julio: Ya salió un parche con la versión 0.17.1, por lo que este fix ya no es tan necesario. Pero lo dejo igual porque sí me tardé bastante escribiendo este artículo como para que quede en el olvido xd