Palavras assistidas para

Tive pelo menos dois sites atingidos por uma onda de spam que parece ter sido projetada para envenenar LLMs. O mesmo ataque também foi relatado aqui pelo menos uma vez (Anyone else currently undergoing mass spam attack?). A melhor solução é configurar Discourse AI - Spam detection, o que eu recomendo, mas é um pouco trabalhoso. Aqui está uma solução temporária que você pode implementar e que levará apenas alguns minutos.

Assume-se que você tenha um sistema operacional do tipo Unix (por exemplo, Linux ou Mac). Se você usa Windows e consegue copiar/colar em um terminal, pode se conectar via SSH ao seu servidor Discourse e colar isso.

O que ele faz é criar um conjunto de palavras monitoradas gerado a partir de um ataque recente que eu vi. Se você tem familiaridade com nano ou similar, pode editá-lo antes de executá-lo. Se não, você pode executar este script e depois excluir as palavras que não gosta com um clique por palavra.

As palavras de bloqueio podem ser muito irritantes, pois impedirão que usuários legítimos criem postagens com essas palavras, então dê uma olhada para ter certeza de que nenhuma dessas palavras provavelmente aparecerá em postagens legítimas no seu fórum!

Coloque o URL do seu site, chave de API e usuário de API nas caixas abaixo (eles estarão apenas no seu navegador - mas você pode simplesmente colar como está e editar o arquivo, se preferir) e, em seguida, copie/cole o bloco de código em um terminal. Ele criará upload_watched_words_full.sh e o tornará executável. Você pode então executá-lo com ./upload_watched_words_full.sh.

cat <<'EOF' > upload_watched_words_full.sh
#!/usr/bin/env bash
# Usage: ./upload_watched_words_full.sh

DISCOURSE_URL="=URL="
API_KEY="=API_KEY="
API_USERNAME="=API_USERNAME="

# Palavras de bloqueio de alta confiança
BLOCK_WORDS=(
  "número de atendimento ao cliente"
  "número de contato"
  "número de suporte"
  "número de telefone para reembolso"
  "ligação gratuita"
  "suporte 24/7"
  "central de ajuda"
  "ligue para nós"
  "representante ao vivo"
  "suporte técnico"
  "lufthansa"
  "royal caribbean"
  "coinbase"
  "robinhood"
  "número de reserva"
  "número de agendamento"
  "cancelamento de voo"
  "taxa de alteração de nome"
  "║"
  "⇆"
  "★"
  "®️"
  "™️"
)

# Palavras de sinalização de risco médio
FLAG_WORDS=(
  "atendimento ao cliente"
  "suporte ao cliente"
  "equipe de suporte"
  "central de ajuda"
  "linha direta"
  "agente"
  "representante"
  "contate-nos"
  "suporte por telefone"
  "central de serviços"
)

# Palavras que exigem aprovação
REQUIRE_APPROVAL_WORDS=(
  "urgente"
  "ação imediata"
  "aja agora"
  "tempo limitado"
  "oferta exclusiva"
  "aprovar isto"
  "verificar conta"
)

# Função para enviar palavras em lote
add_words () {
  local ACTION="$1"
  shift
  local WORDS=("$@")

  # Construir parâmetros words[]
  local DATA=""
  for w in "${WORDS[@]}"; do
    DATA+="words%5B%5D=$(printf '%s' "$w" | jq -s -R -r @uri)&#"
  done
  DATA+="replacement=&action_key=${ACTION}&case_sensitive=false&html=false"

  echo "Enviando palavras ${ACTION}..."
  curl -s -X POST "${DISCOURSE_URL}/admin/customize/watched_words.json" \
    -H "Api-Key: ${API_KEY}" \
    -H "Api-Username: ${API_USERNAME}" \
    -H "Content-Type: application/x-www-form-urlencoded" \
    --data "$DATA"
  echo -e "\nConcluído."
}

# Enviar palavras de bloqueio
add_words "block" "${BLOCK_WORDS[@]}"

# Enviar palavras de sinalização
add_words "flag" "${FLAG_WORDS[@]}"

# Enviar palavras que exigem aprovação
add_words "require_approval" "${REQUIRE_APPROVAL_WORDS[@]}"
EOF

# Tornar o script executável
chmod +x upload_watched_words_full.sh

echo "Script 'upload_watched_words_full.sh' criado e tornado executável."

8 curtidas

Mas Watched word Approval doesn't work if a user edits the reply?

Bem, eu não prestei atenção nisso. Minha esperança ingênua é que os spammers não saibam fazer isso. :person_shrugging:

1 curtida

Os bots que tínhamos há alguns anos postavam um monte de besteiras como dhfhstyhjfhhr como título do tópico para gerar threads e passar pelo filtro de palavras-chave, depois editavam para a mensagem real de spam “melhores cassinos online”. :expressionless_face:

2 curtidas

Isso é bizarro que editar a postagem passe pelas palavras observadas.

Talvez este lote de spammers não pense em fazer isso. Ou talvez isso não ajude em nada. :pessoa_dando_de_ombros:

1 curtida

Obrigado Jay, ótimo script, obrigado por criá-lo. Alguém que o usou descobriu que funcionou - em termos da solução alternativa de ‘editar posts’? Os bots estão editando os posts ou apenas enviando o texto diretamente?

Não sei, mas se esse for o problema, você pode alterar as configurações para que alguns usuários não possam editar posts (Edit post allowed groups), talvez exigindo TL2 e ajustando as configurações para facilitar/dificultar o acesso ao tl2.

Para usuários regulares, especialmente os novos, não poder editar um post provavelmente não é um grande problema, e pode nem ser algo que eles esperem.

1 curtida

Bom ponto. Vou mudar para que tl_0 não possa editar posts.

Revisando um dos posts recentes:

Parece que inicialmente era apenas lixo e depois foi editado para spam, isso teria contornado as Palavras Observadas, pelo que entendi.

Dado que as edições de posts de jargão inócuo para spam estão se tornando parte do modus operandi dos bots em seus esforços para frustrar os filtros de spam, a equipe do Discourse acha que tl_0 não deveria, por padrão, poder editar posts?

4 curtidas

Uau. Surpreso que o padrão inclua TL0.
Bom saber com certeza que esses spammers estão usando esse truque.

Acho que o módulo de Spam de IA teria pego.

2 curtidas

Com certeza teria. No entanto, embora não seja super caro, é um pouco chato ter que configurar IA em todos os Discourse para repelir spam. Muitos dos meus fóruns não precisariam (ou não quereriam) dele para nenhum dos outros recursos de IA do Discourse, que são bastante úteis.

1 curtida

A solução aqui não é impedir que tl0 ou qualquer outro grupo edite posts.

A solução é garantir que a edição de um post não contorne nenhuma proteção do site. Um post editado pode (como vimos) conter spam, ódio ou outros comportamentos indesejados. Se posts editados ignorarem Palavras Observadas e outros filtros, isso definitivamente se tornará uma abordagem padrão não apenas para bots, mas para humanos que desejam contornar as proteções do site.

3 curtidas

Concordo. Parece bizarro que não funcione dessa forma. E se eu entendi corretamente, está quebrado há muito tempo.

Ah, é o “comportamento esperado”:

Aposto que é assim que isso aconteceu, talvez.

Parece que as palavras observadas poderiam ser aplicadas antes de salvar (before_save), mas eu não olhei o código.

2 curtidas

Há uma questão sobre o que significa para alguns tipos de palavras observadas se aplicarem a uma edição. Mas também está claro que essa limitação reduz muito o valor das palavras observadas.

Eu esperaria que fosse útil propor uma especificação sobre o que exatamente deve acontecer para cada tipo em caso de edição; isso tornaria a solicitação de recurso mais acionável. No entanto, não fiz esse trabalho, embora tenha passado algum tempo pensando em casos específicos.

3 curtidas