Preciso de ajuda com uma quantidade enorme de spam

Isso tem sido uma dor de cabeça para combater, aqui estão algumas informações de fundo.

Eu administro uma comunidade com uma quantidade tremenda de hype em torno dela. Temos bem mais de um milhão de pessoas acompanhando nosso projeto e configuramos um Fórum Discourse para auxiliar os desenvolvedores em nossa comunidade. Essencialmente, é um fórum de suporte para desenvolvedores interagirem com nosso projeto, não permitimos que conteúdo fora do escopo de desenvolvimento seja postado.

Há cerca de três dias, uma figura proeminente do Youtube/Twitter fez a alegação falsa de que, ao se registrar em nosso fórum de suporte e fazer postagens nele, você se tornaria elegível para receber recompensas/brindes de nossa equipe. Isso é totalmente falso e resultou em 3 dias de inscrições quase constantes e uma grande quantidade de postagens e tópicos de spam no fórum.

Estamos falando de algo entre 2.500 e 7.500 inscrições por dia no momento, principalmente de países asiáticos e do Oriente Médio (2 países específicos se destacam como os principais infratores).

Os usuários que se inscrevem parecem ser uma mistura de bots e usuários reais. Quase todos os IPs são únicos (boa mistura de IPv4 e IPv6), e não parecem haver sub-redes proeminentes para banir no lado IPv4 para eliminar blocos deles (com IPv6 tive alguma sorte banindo blocos /24, mas parece facilmente contornável). Os endereços de e-mail são todos gmail, e uma grande quantidade deles parece ser de e-mails descartáveis/de bot. A única indicação de que essas são contas de bot é que muitos deles reutilizam a mesma imagem de banner em seus perfis, bem como algum texto genérico de biografia “Eu sou um estudante”.

Eu anonimizei esta lista alterando caracteres/números, mas para dar exemplos dos tipos de e-mails associados a essas inscrições:

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

Esses usuários estão se inscrevendo e, em seguida, criando novos tópicos irrelevantes para nossa comunidade. Frequentemente, esses tópicos nem são palavras, é como se um bebê tivesse batido no teclado. Os tópicos não são muito difíceis de detectar e excluir, mas o pior tem sido o spam em tópicos pré-existentes com spam / conteúdo de baixa qualidade. Muitos de nossos tópicos mais populares tiveram entre 500 e 1.500 novas postagens de spam/baixa qualidade adicionadas a eles.

No momento, desabilitei completamente os registros, mas estou procurando ajuda com o seguinte:

  1. Existe alguma maneira de purgar membros em massa? Posso excluir todos os usuários TL0 que se registraram nas últimas 72 horas?
  2. Existe uma maneira de detectar e-mails de spam/descartáveis e negar o registro deles? Neste ponto, eu estaria disposto a bloquear todos os e-mails que terminam em 3-5 números por enquanto.
  3. Você sugeriria definir o auto-silenciamento para um valor maior que 3000 milissegundos?
  4. Você pode me dar outras dicas ou truques para ajudar a combater volumes massivos de spam? Sinto que isso tem sido um trabalho em tempo integral nos últimos 2-3 dias. Eu uso o Akismet, mas existem plugins adicionais que podem me ajudar?
5 curtidas

Eu definiria - pelo menos temporariamente - a criação/resposta para todas as categorias como TL1 ou talvez até TL2, ou usaria o Assistente Personalizado para fazer com que novos usuários passem por alguns obstáculos (“Entendo que não receberei recompensas” com 10 opções, apenas uma correta) para que sejam adicionados a um grupo que pode postar.

4 curtidas

Você pode tentar usar um campo de usuário personalizado com uma opção de múltipla seleção obrigatória em sua página de inscrição, com várias respostas, sendo apenas uma delas aceitável. Isso provavelmente diminuirá um pouco a velocidade dos bots, ou pelo menos lhe dará um campo facilmente filtrável para ajudar a excluir inscrições falsas. (NOTA: Depois de pensar sobre isso, suspeito que isso não funcionará porque não há nada que exija uma resposta específica. O método em uma resposta anterior pode funcionar melhor.)

Acho que armadilhas do tipo captcha são ineficazes hoje em dia, os bots conseguem resolvê-las mais rápido do que eu.

Deveria haver uma maneira de excluir os novos usuários L0 no rails, mas certifique-se de fazer um backup primeiro. Se eles postaram, você terá que excluir essas postagens primeiro.

Outros disseram que exigir IDs de dois fatores para inscrições elimina praticamente os spammers. Eu ainda não precisei recorrer a isso.

6 curtidas

Agradeço as respostas até agora.

Com o desativação de registros por um dia, conseguimos nos recuperar.

@RGJ Gostei da sua ideia de criar etapas para conseguir ser adicionado a um grupo com permissões de postagem, é algo que vamos explorar.

Usando o explorador de dados, consegui identificar cerca de 5.000 contas de bots adicionais que passaram despercebidas até agora.

@MikeNolan Não tenho certeza se já tenho acesso ao console do rails. Estamos hospedando diretamente com o discourse e eu não fiz parte do processo de compra/onboarding, então estou encaminhando esta questão para cima para determinar qual acesso temos.

Imagino que eu também possa realizar exclusões através da API? Vejo que posso gerar minhas próprias credenciais de API facilmente.

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'Usuário {user_id} excluído com sucesso')
    else:
        print(f'Falha ao excluir usuário {user_id}. Código de status: {response.status_code}, Resposta: {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'Ocorreu um erro ao excluir o usuário {user_id}: {e}')
        
        time.sleep(1)  # Adiciona um atraso para evitar sobrecarregar o servidor com requisições
1 curtida

Há vários anos, nossos antigos fóruns (phpbb3) foram atingidos por uma grande onda de registros falsos, muitos dos e-mails eram semelhantes aos do gmail que você listou, embora também tenhamos recebido vários de endereços .ru, notavelmente yandex.

Em um ponto, estávamos recebendo 1000 por dia. Quando conseguimos controlar, tínhamos mais de 80.000 registros falsos.

Resolvemos o problema exigindo um ID de membro válido e atual (nosso sistema de membros era totalmente separado) que ainda não tivesse sido usado para criar um registro no fórum. Dessa forma, mesmo que alguém tivesse acesso aos nossos registros de membros (eles estão online), eles só poderiam usar um ID uma vez. Os registros falsos caíram para essencialmente zero.

Eu não usei o explorador de dados o suficiente para saber quais são suas limitações. Sou um DBA postgresql há mais de 20 anos, então ir diretamente para o psql não foi um problema para mim, mas limitei minhas atividades lá a consultas somente leitura.

3 curtidas

A impressão digital ainda é uma técnica viável ou os navegadores a tornaram uma ferramenta sem poder?

1 curtida

A pergunta certa seria se essa técnica já foi viável :wink:

(E só um lembrete: é ilegal na UE)

do 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

Se for usado apenas para prevenção de spam e não para rastreamento de comportamento do usuário, ele será permitido pelo GDPR como “interesse legítimo”.

1 curtida

E como alguém o usaria sem identificação?

Não tenho certeza do que você quer dizer com ‘identificação’.

Se você é um usuário no meu fórum e eu o bani, posso usar o plugin de fingerprinting para ver que você criou uma nova conta com um nome diferente, para que eu possa banir essa conta também. Nesse caso, estou meramente usando o fingerprinting para proteger meu próprio interesse como proprietário do fórum. Não estou vendendo nada para você e não estou invadindo sua privacidade desnecessariamente. Funciona da mesma forma que armazenar e comparar endereços IP, exceto pelo fato de que eles podem ser facilmente alterados usando um proxy ou VPN.

2 curtidas

Os comentários no tópico da ferramenta de plugin de fingerprinting podem não concordar totalmente com você sobre a legalidade do fingerprinting e a UE.

Felizmente, atualmente não tenho um site para o qual o fingerprinting pareceria uma medida anti-spam útil.

1 curtida

Você já considerou ativar a Aprovação de Novos Usuários? Você também poderia informar à sua comunidade que novos membros precisam de um convite por link de e-mail.

Se o youtuber ainda for um problema, marque o vídeo e registre uma reclamação no Youtube.

1 curtida

Apenas para retornar e finalizar isso - isso foi acompanhado e resolvido via PM. :partying_face:

Mas para qualquer pessoa em uma posição semelhante, você pode realmente excluir usuários usando a API se não tiver acesso ao console do rails devido à hospedagem gerenciada. :+1:

1 curtida