Нужна помощь с огромным количеством спама

Бороться с этим было головной болью, поэтому вот немного фоновой информации.

Я управляю сообществом, вокруг которого сложилась огромная ажиотаж. За нашим проектом следят более миллиона человек, и мы создали форум Discourse для поддержки разработчиков внутри нашего сообщества. По сути, это форум технической поддержки для взаимодействия с нашим проектом; мы не допускаем публикаций, не связанных с разработкой.

Около трёх дней назад известная личность с YouTube и Twitter сделала ложное заявление о том, что регистрация на нашем форуме поддержки и публикация сообщений там делают вас eligible для получения наград/подарков от нашей команды. Это полностью неверно и привело к трём дням почти непрерывной регистрации, а также к большому количеству спам-сообщений и тем на форуме.

Речь идёт о 2500–7500 регистрациях в день, преимущественно из азиатских и ближневосточных стран (две конкретные страны выделяются как основные нарушители).

Пользователи, регистрирующиеся сейчас, — это смесь ботов и реальных людей. Почти все IP-адреса уникальны (здоровое сочетание IPv4 и IPv6), и не видно заметных подсетей, которые можно было бы заблокировать в IPv4, чтобы отсеять большие группы (в IPv6 мне немного повезло блокировать блоки /24, но это легко обходится). Все адреса электронной почты — gmail, и многие из них выглядят как одноразовые или ботовские. Единственный признак того, что это бот-аккаунты, — многие из них используют одно и то же изображение баннера в профиле, а также шаблонный текст биографии «Я студент».

Я анонимизировал этот список, изменив символы и цифры, но чтобы показать примеры типов электронных адресов, связанных с этими регистрациями:

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

Эти пользователи регистрируются и создают новые темы, не имеющие отношения к нашему сообществу. Часто эти темы даже не содержат слов — будто малыш ударил по клавиатуре. Обнаружить и удалить такие темы несложно, но хуже то, что они спамят существующие темы спамом или низкокачественным контентом. Многие из наших популярных тем получили от 500 до 1500 новых спам- или низкокачественных постов.

На данный момент я полностью отключил регистрации, но ищу помощи по следующим вопросам:

  1. Есть ли способ массово удалить участников? Могу ли я удалить всех пользователей с уровнем TL0, зарегистрировавшихся за последние 72 часа?
  2. Можно ли обнаруживать спам- или одноразовые электронные адреса и отказывать в регистрации с них? На данный момент я готов временно блокировать все адреса, заканчивающиеся на 3–5 цифр.
  3. Стоит ли рекомендовать установить значение авто-замолчания (auto-silence) выше 3000 миллисекунд?
  4. Можете ли вы дать какие-либо другие советы или хитрости для борьбы с огромными объёмами спама? Чувствую, что это стало работой на полный рабочий день за последние 2–3 дня. Я использую Akismet, но есть ли дополнительные плагины, которые могут помочь?

Я бы — хотя бы временно — установил права на создание и ответ для всех категорий на TL1 или, возможно, даже TL2, либо использовал Custom Wizard, чтобы заставить новых пользователей пройти несколько проверок (например, «Я понимаю, что не получу вознаграждение» с 10 вариантами, где только один правильный), чтобы добавить их в группу, имеющую право публиковать сообщения.

Вы можете попробовать добавить на страницу регистрации пользовательское поле с обязательным многовариантным выбором, где предложено несколько вариантов, но приемлем только один. Это, вероятно, немного замедлит ботов или хотя бы предоставит вам поле, которое легко фильтровать для удаления поддельных регистраций. (ПРИМЕЧАНИЕ: после раздумий я подозреваю, что это не сработает, так как нет механизма, требующего конкретного ответа. Метод из предыдущего ответа может оказаться эффективнее.)

Я считаю, что ловушки типа CAPTCHA в наши дни неэффективны: боты решают их быстрее, чем я.

В Rails должен быть способ удалить новых пользователей уровня L0, но обязательно сделайте резервную копию beforehand. Если они уже создали сообщения, сначала нужно удалить их.

Другие отмечали, что требование двухфакторной аутентификации при регистрации практически устраняет спамеров. Мне пока не приходилось прибегать к этому методу.

Я благодарен за все ответы, которые уже получил.

Благодаря временному отключению регистрации на один день нам удалось снова прийти в себя.

@RGJ Мне нравится ваша идея с дополнительными проверками для добавления в группу с правами на публикацию — мы обязательно рассмотрим этот вариант.

С помощью Data Explorer я смог выявить около 5 000 дополнительных бот-аккаунтов, которые до сих пор оставались незамеченными.

@MikeNolan Пока не уверен, есть ли у меня доступ к консоли Rails. Мы хостимся напрямую через Discourse, и я не участвовал в процессе покупки или онбординга, поэтому сейчас уточняю у руководства, какие у нас есть права доступа.

Думаю, что удаление пользователей можно выполнять и через API? Я вижу, что могу легко сгенерировать собственные учётные данные для API.

Что-то вроде этого:

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'Пользователь {user_id} успешно удалён')
    else:
        print(f'Не удалось удалить пользователя {user_id}. Код статуса: {response.status_code}, Ответ: {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'Произошла ошибка при удалении пользователя {user_id}: {e}')
        
        time.sleep(1)  # Добавляем задержку, чтобы не перегружать сервер запросами

Несколько лет назад наши старые форумы (phpbb3) подверглись массовой волне фальшивых регистраций. Многие из указанных вами email-адресов были похожи на gmail, но также было много регистраций с доменов .ru, в частности от Yandex.

В какой-то момент мы получали по 1000 таких регистраций в день. К тому времени, как мы взяли ситуацию под контроль, у нас накопилось более 80 000 фальшивых записей.

Мы решили проблему, потребовав наличия действительного текущего идентификатора членства (наша система членства была полностью отдельной), который ещё не использовался для создания записи на форуме. Таким образом, даже если кто-то получал доступ к нашим записям о членстве (они хранятся онлайн), он мог использовать идентификатор только один раз. Количество фальшивых регистраций упало практически до нуля.

Я недостаточно использовал Data Explorer, чтобы знать его ограничения. Я работаю администратором баз данных PostgreSQL уже более 20 лет, поэтому прямой доступ через psql для меня не был проблемой, однако я ограничивал свою работу там только запросами в режиме только для чтения.

Остается ли отпечатывание (fingerprinting) жизнеспособной техникой, или браузеры в значительной степени превратили его в бесполезный инструмент?

Правильный вопрос — был ли это когда-либо жизнеспособный метод :wink:

(И напомним: в ЕС это незаконно)

из Rails (docker exec -it my_container rails c):

spammers = User.where(trust_level: 0).where("created_at > ?",  Date.today - 3)
puts "найдено #{spammers.length} спамеров"

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

Если это используется только для предотвращения спама, а не для отслеживания поведения пользователей, то это будет разрешено GDPR как «законный интерес».

И как кто-то может использовать это без идентификации?

Я не совсем понимаю, что вы имеете в виду под «идентификацией».

Если вы пользователь моего форума, и я вас забанил, я могу использовать плагин для отпечатков (fingerprinting), чтобы увидеть, что вы создали новую учётную запись под другим именем, и тогда я смогу забанить и эту учётную запись. В этом случае я просто использую отпечатки для защиты своих интересов как владельца форума. Я ничего вам не продаю и не нарушаю вашу частную жизнь без необходимости. Это работает так же, как хранение и сравнение IP-адресов, за исключением того, что IP-адреса можно легко изменить, используя прокси или VPN.

Комментарии в теме о плагине для отпечатков браузера могут не полностью совпадать с вашим мнением относительно законности сбора отпечатков в ЕС.

К счастью, у меня сейчас нет сайта, для которого сбор отпечатков казался бы полезной мерой борьбы со спамом.

Вы подумывали включить функцию одобрения новых пользователей? Вы также можете сообщить участникам вашего сообщества, что новые члены требуют приглашения по электронной ссылке.

Если видеоблогер по-прежнему является проблемой, пометьте видео и подайте жалобу в YouTube.

Чтобы вернуться к теме и завершить её: этот вопрос был обсуждён и решён через личные сообщения. :partying_face:

Но для тех, кто находится в аналогичной ситуации: вы действительно можете удалять пользователей через API, если у вас нет доступа к консоли Rails из-за того, что вы используете управляемый хостинг. :+1: