Necesito ayuda con una gran cantidad de spam

Esto ha sido un dolor de cabeza para combatir, aquí hay un poco de información de fondo.

Dirijo una comunidad que tiene una gran expectación. Tenemos más de un millón de personas siguiendo nuestro proyecto y hemos configurado un Foro Discourse para ayudar a los desarrolladores dentro de nuestra comunidad. Esencialmente, es un foro de soporte para desarrolladores para interactuar con nuestro proyecto, no permitimos que se publique contenido fuera del contenido relacionado con el desarrollo.

Hace aproximadamente tres días, una figura prominente de Youtube/Twitter afirmó falsamente que al registrarse en nuestro foro de soporte y publicar en él, uno se hace elegible para recibir recompensas/obsequios de nuestro equipo. Esto es completamente falso y ha resultado en 3 días de registros casi constantes, y una gran cantidad de publicaciones y temas de spam en el foro.

Estamos hablando de entre 2.500 y 7.500 registros al día en este momento, principalmente de países asiáticos y de Oriente Medio (2 países específicos se destacan como los principales infractores).

Los usuarios que se registran parecen ser una mezcla de bots y usuarios reales. Casi todas las IP son únicas (buena mezcla de IPv4 e IPv6), y no parece haber subredes prominentes para bloquear en el lado IPv4 para eliminarlos (en IPv6 he tenido algo de suerte bloqueando bloques /24, pero parece fácilmente evitable). Las direcciones de correo electrónico son todas de Gmail, y una gran cantidad de ellas parecen ser direcciones de correo electrónico desechables/de bots. La única indicación de que estas son cuentas de bots es que muchas de ellas reutilizan la misma imagen de banner en su perfil, así como un texto genérico de biografía “Soy un estudiante”.

He anonimizado esta lista cambiando caracteres/números, pero para darles ejemplos de los tipos de correos electrónicos adjuntos a estos registros:

  1. syedaleem435@gmail.com
  2. kksam362@gmail.com
  3. julik8641@gmail.com
  4. eishanihal253@gmail.com
  5. subir2426@gmail.com
  6. meeagle38103@gmail.com

Estos usuarios se registran y luego crean temas nuevos irrelevantes para nuestra comunidad. A menudo, estos temas ni siquiera son palabras, es como si un niño pequeño hubiera aplastado el teclado. Los temas no son muy difíciles de detectar y eliminar, pero lo que ha sido peor es que spammean temas preexistentes con spam / contenido de baja calidad. Muchos de nuestros temas más populares han tenido entre 500 y 1.500 publicaciones nuevas de spam/baja calidad añadidas.

A partir de ahora, he deshabilitado completamente los registros, pero estoy buscando ayuda en lo siguiente:

  1. ¿Hay alguna forma de purgar masivamente miembros? ¿Puedo eliminar todos los usuarios TL0 que se hayan registrado en las últimas 72 horas?
  2. ¿Hay alguna forma de detectar correos electrónicos de spam/desechables y denegar el registro de ellos? En este punto, estaría dispuesto a bloquear todos los correos electrónicos que terminen en 3-5 números por el momento.
  3. ¿Sugeriría establecer el silencio automático a un valor superior a 3000 milisegundos?
  4. ¿Puede darme algún otro consejo o truco para ayudar a combatir volúmenes masivos de spam? Siento que esto ha sido un trabajo a tiempo completo durante los últimos 2-3 días. Uso Akismet, pero ¿hay algún plugin adicional que pueda ayudarme?
5 Me gusta

Yo establecería, al menos temporalmente, la creación/respuesta para todas las categorías en TL1 o quizás incluso TL2, o usaría el Asistente Personalizado para que los nuevos usuarios pasen por algunos obstáculos (“Entiendo que no recibiré recompensas” con 10 opciones, solo una correcta) para que se les añada a un grupo que pueda publicar.

4 Me gusta

Es posible que intentes usar un campo de usuario personalizado con una opción de selección múltiple obligatoria en tu página de registro, con varias respuestas, de las cuales solo una es aceptable. Eso probablemente ralentizará un poco a los bots, o al menos te dará un campo fácilmente filtrable para ayudar a eliminar los registros falsos. (NOTA: Después de pensarlo, sospecho que esto no funcionará porque no hay nada que exija una respuesta específica. El método en una respuesta anterior podría funcionar mejor).

Encuentro que las trampas tipo captcha son ineficaces hoy en día, los bots pueden resolverlas más rápido que yo.

Debería haber una manera de eliminar los nuevos usuarios L0 en rails, pero asegúrate de hacer una copia de seguridad primero. Si han publicado, tendrás que eliminar esas publicaciones primero.

Otros han dicho que exigir identificaciones de dos factores para los registros elimina prácticamente a los spammers. Aún no he tenido que recurrir a eso.

6 Me gusta

Agradezco las respuestas hasta ahora.

Con el registro deshabilitado por un día, pudimos volver a tomar aire.

@RGJ Me gusta tu idea de tener obstáculos que superar para poder ser añadido a un grupo que tenga permisos de publicación, eso es algo que vamos a explorar.

Usando el explorador de datos, he podido identificar unas 5.000 cuentas de bots adicionales que han estado pasando desapercibidas hasta ahora.

@MikeNolan No estoy seguro de si todavía tengo acceso a la consola de rails. Estamos alojando directamente con discourse y no participé en el proceso de compra / incorporación, así que estoy escalando esta pregunta para determinar qué acceso tenemos.

Imagino que también puedo realizar eliminaciones a través de la API. Veo que puedo generar credenciales de API fácilmente.

Algo como:

import csv
import requests
import time

api_key = 'api_key'
api_username = 'api_username'
base_url = 'https://mydomain.com'
headers = {
    'Api-Key': api_key,
    'Api-Username': api_username
}

def delete_user(user_id):
    delete_url = f'{base_url}/admin/users/{user_id}.json'
    response = requests.delete(delete_url, headers=headers)
    
    if response.status_code == 200:
        print(f'Usuario {user_id} eliminado con éxito')
    else:
        print(f'Error al eliminar usuario {user_id}. Código de estado: {response.status_code}, Respuesta: {response.text}')

with open('user_ids_to_delete.csv', 'r') as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        user_id = row[0]
        try:
            delete_user(user_id)
        except Exception as e:
            print(f'Ocurrió un error al eliminar el usuario {user_id}: {e}')
        
        time.sleep(1)  # Añade un retraso para evitar sobrecargar el servidor con solicitudes
1 me gusta

Hace varios años, nuestros antiguos foros (phpbb3) se vieron afectados por una gran oleada de registros falsos, muchos de los correos electrónicos eran similares a los de Gmail que mencionaste, aunque también recibimos bastantes de direcciones .ru, especialmente de Yandex.

En un momento dado, recibíamos 1000 al día. Para cuando logramos controlarlo, teníamos más de 80.000 registros falsos.

Solucionamos el problema exigiendo un ID de membresía válido y actual (nuestro sistema de membresía estaba totalmente separado) que no se hubiera utilizado previamente para crear un registro en el foro. De esa manera, incluso si alguien tuviera acceso a nuestros registros de membresía (están en línea), solo podría usar un ID una vez. Los registros falsos se redujeron prácticamente a cero.

No he utilizado el explorador de datos lo suficiente como para conocer sus limitaciones. He sido DBA de PostgreSQL durante más de 20 años, por lo que acceder directamente a psql no ha sido un problema para mí, pero he limitado mis actividades allí a consultas de solo lectura.

3 Me gusta

¿Sigue siendo el fingerprinting una técnica viable o los navegadores la han convertido prácticamente en una herramienta inútil?

1 me gusta

La pregunta correcta sería si alguna vez ha sido una técnica viable :wink:

(Y solo un recordatorio: es ilegal en la UE)

desde rails (docker exec -it my_container rails c):

spammers = User.where(trust_level: 0).where("created_at > ?",  Date.today - 3)
puts "encontrados #{spammers.length} spammers"

destroyer = UserDestroyer.new(Discourse.system_user)
spammers.each do |spammer|
  destroyer.destroy(spammer, delete_posts: true)
end

Si solo se utiliza para la prevención de spam y no para el seguimiento del comportamiento del usuario, el RGPD lo permitirá como “interés legítimo”.

1 me gusta

¿Y cómo lo usaría alguien sin identificación?

No estoy seguro de a qué te refieres con ‘identificación’.

Si eres un usuario en mi foro y te he prohibido, puedo usar el plugin de huellas digitales para ver que creaste una nueva cuenta con un nombre diferente, para que también pueda prohibir esa cuenta. En ese caso, simplemente estoy usando la huella digital para proteger mis propios intereses como propietario del foro. No te estoy vendiendo nada y no estoy invadiendo tu privacidad innecesariamente. Funciona de la misma manera que almacenar y comparar direcciones IP, excepto por el hecho de que estas se pueden cambiar fácilmente usando un proxy o VPN.

2 Me gusta

Los comentarios en el tema de la herramienta del plugin de huellas digitales pueden no estar totalmente de acuerdo contigo sobre la legalidad de las huellas digitales y la UE.

Afortunadamente, actualmente no tengo un sitio para el cual las huellas digitales parezcan una medida anti-spam útil.

1 me gusta

¿Has considerado activar la Aprobación de Nuevos Usuarios? También podrías decirle a tu comunidad que los nuevos miembros requieren una invitación por enlace de correo electrónico.

Si el youtuber sigue siendo un problema, marca el video y presenta una queja ante Youtube.

1 me gusta

Solo para volver y redondear esto: esto se hizo un seguimiento y se resolvió a través de PM. :partying_face:

Pero para cualquiera en una posición similar, de hecho puede eliminar usuarios usando la API si no tiene acceso a la consola de rails debido a estar en alojamiento administrado. :+1:

1 me gusta