Pull to refresh

Построение эффективной Анти-Спам системы

Spamming and anti-spamming
В любой системе где есть общение пользователей будет существовать проблема анти спама. Рассмотрим построение системы на примере комментирования к какой-нибудь блог записи и др. Не будем использовать принудительную регистрацию и капчи. Будем использовать Систему баллов (Points System)

Ее можно решить, введя систему принудительной регистрации – это когда невозможно добавить новый комментарий, предварительно не зарегистрировавшись в этой системе. Можно усложнить обязательным подтверждением email адреса.

Второй, часто используемый способ – введение проверки от ботов (CAPTCHA). Чем плоха эта капча? Может быть она и избавит наш блог от спама. Однако она резко ограничивает добавление новых комментариев. Потому что, если 10 секунд тратишь на написание своего очень полезного комментария и 10 секунд разгадываешь, что же изображено на этой самой капче – может банально стать лень или не угадать с циферками.

Есть еще несколько вариантов анти спама (анти ботов) – сделать сложную форму с блек джеками и хешами. Можно скрыть форму (и показывать ее по запросу на javascript). И другие техники, которые усложняют жизнь спамерам.

Система баллов (Points System)


Попробуем анализировать сообщения на сервере и решать, спам это или нет.

На основе статьи How I built an effective blog comment spam blocker, по совету outcoldman. Это свод правил, по которым добавляются или отнимаются некие баллы сообщению по некоторым правилам.

Для каждого комментария который нравится системе, вы получаете баллы. Когда системе не нравятся сообщения — она отнимает баллы. Если после всех проверок в сумме получилось 1 или больше баллов – сообщение публикуется. Если 0 оно помечается как спам и публикуется. Если меньше 0 то можно смело его уничтожать.

Типы спама


Спам бывает автоматический и ручной.
Автоматический спам (спам боты) – наиболее простые к обнаружению. Есть несколько факторов, которые определяют сообщение как спам.

Ручной спам более сложный. Человек вручную вводит «правильные» данные в форму и отправляет. Однако все равно можно анализировать сообщения и принимать правильные решения.

Правила


На своем сайте я решал проблему массового автоматического спама в комментариях, отзывах и других формах. Мои правила несколько отличаются от правил из статьи. Они более адаптированы к моим локальным задачам и добавлены несколько других правил. Если есть другие идеи, как анализировать сообщения — обязательно занесем ее в табличку.

Правило Значения Баллы
Количество ссылок в сообщении ≥ 2 -1 за каждую ссылку
< 2 +1
Длина сообщения > 20 символов и без ссылок +2 балла
< 20 -1 балл
Ключевые слова Виагра, казино и другие слова по словарю -1 балл за каждое слово
Анализ ссылок в сообщение Если в ссылке домен в зоне .de, .pl, or .cn (могут быть другие) -1 балл

На этом правила, которые я позаимствовал – закончились. Далее будут адаптированные или новые правила для анализа.
Проверяем UrlReferrer в форме и сопоставляем с тем, который должен быть по правде Не стоит сильно обращать внимания на различия этого параметра -2 балла если отличаются
Русский текст Т.к. аудитория сайта рускоязычная, то в имени и других полях не должно быть других языков. Я проверяю процентное соотношение русских символов < 10% -2 балла. Если все хорошо +1
BB теги. Попадались сообщения, где в теле были BB теги. Движком сайта это не предусмотрено, значит сразу такие сообщения в мусорку [url] и [link] -2 балла за каждый тег
Анализ предыдущих сообщений с этого адреса (email, ip и другие) Если уже были пометки как спам -1 балл


Дальнейшее развитие


Развивать систему можно по ходу работы, анализируя сообщения спама и добавляя новые правила. Есть несколько идей, которые пока не получается реализовать:
  • Анализ бессмысленного текста — это когда в сообщении не просто слова, а случайная символы. Сложность состоит в определении что это случайные символы, а не нормальные слова.
  • Есть статья Определяем «неправильные» слова при борьбе со спамом, которая может помочь отлавливать слова, внешне похожие на «нормальные»

Что хотелось бы сделать дальше — собрать другие возможные правила и посмотреть как будет работать система. Сейчас она отлавливает каждый день до 500 спам сообщений. Это все автоматические боты и ничего вредного они не делают, а я смотрю на растущий счетчик пойманного спама и знаю — система работает. Взглянуть на класс можно тут
Tags: спамантиспамантиспамерский фильтр
Hubs: Spamming and anti-spamming
Total votes 10: ↑7 and ↓3 +4
Comments 8
Comments Comments 8