День борьбы со спамом

26.07.2013
@LEXXX_NF

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

Наверно, всем известно, что спамят в комментах в основном боты — тупые скрипты, которые ищут в интернете страницы с формами и забивают в эти формы пакостные данные. Но кроме ботов, распространять спам в сети могут и реальные люди, люди, которым за это платят. Обычно, это индусы или просто школота, которая хочет заработать копеечку на мороженку. И есть капча может помочь против бота, то против человека она бессильна, особенно если этому человеку платят $2 за 100 распознанных каптч.

Как бороться с ботами

Википедия нам подсказывает, что капча помогает определить где человек, а где робот с помощью особого теста, который робот выполнить никак не сможет, а вот среднестатистический человек — запросто. Таких тестов изобрели превеликое множество, вот только несколько примеров:

  • Картинка с текстом — наверно самая древняя и самая традиционная капча.
    Обычная капча
  • Аудиокапча — вместо картинки с буквами нам проигрывают звуковой файл с цифрами — глаза не сломаешь, зато уши — запросто.
    Аудиокапча
  • Вопрос-ответ — нас просят решить либо простенькое математическое уравнение, либо вспомнить, как называется голубой шарик, по которому мы все ходим.
  • Капча с картинкой — нужно либо перевернуть картинку верхом вверх, а низом — вниз в помощью специального ползунка, либо отметить на какой из картинок изображен определённый предмет.
    Капча с картинками
  • Пазл — это тоже капча с картинкой, но для самых хардкорных извращенцев — нужно собрать картинку из разрозненных частей. Очень увлекательно.
    Капча-паззл

А как еще можно определить робота?

  • Honeypot. Это, наверное, одна из самых древних методик выведения негодяев на чистую воду. Суть метода в том, что бы подсунуть злоумышленнику специально подготовленную систему, которую он неприменно захочет атаковать. Своеобразная подсадная утка. В переложении на веб-формы, honeypot — это дополнительное поле в форме, которое обычные пользователи должны оставить пустым, например, потому что это поле скрыто. Рассчет на то, что бот станет заполнять все поля подряд, включая и наше поле-ловушку. К сожалению, на мой блог ходят достаточно умные боты, чтобы не заполнять такие поля.
  • Сессия. Этот способ помогает защититься от CSRF-атак. Суть его состоит в том, что, когда пользователь заходит на страницу с формой, мы в его сессию записываем некоторое число, которое называется CSRF-токен, а и в скрытое поле в форме вставляем его же. Если реальный человек зашел на страницу с формой, заполнил её и отправил, то число в его сессии и число, отправленное в скрытом поле формы совпадёт. Здесь рассчет на то, что боты не используют сессию — обычно бото-писателям лень возиться с куками — это раз. И еще боты не заходят на страницу с формой, они сразу посылают заполненные данные на сервер жертвы — это два. К сожалению, мои боты оказалось достаточно трудолюбивыми, чтобы делать и то и другое.
  • Javascript. Всем известно, что боты не умеют выполнять javascript. B даже всемогущий Google едва-едва научился выполнять простенькие скрипты внутри страниц. Этого знания нам хватит, чтобы установить достаточно высокую стену на пути спам-ботов, нужно лишь сделать что-нибудь javascript’ом. Например, можно скриптом добавлять поле в форму, без которого форма будет считаться заполненной некорректно. Можно устанавливать javascript’ом CSRF-токен из предыдущего пункта. Это защита будет эффективно работать против большинства обычных спам-ботов и я считаю, что её достаточно для 99% сайтов в интернете. Разумеется, у пользователей с отключенным javascript’ом, отправить форму не получится, но они сами знают, на что идут. Однако, если кто-то вознамерился заспамить именно ваш сайт, то он конечно напишет такого бота, который выполнит или сэмулилрует все необходимые действия.
  • Последний рубеж обороны — самый надёжный и практически непробиваемый — использование сервисов типа Akismet или Mollom. Суть их работы в том, что они анализируют текст сообщений по каким-то хитрым алгоритмам и выносят свой вердикт: спам или не спам. Если сервис Akismet известен любому владельцу блога на wordpress’е, то про сервис, который использую я у себя в блоге, знают немногие. Но называется Яндекс.Чистый Веб. Преимущество этого сервиса в том, что он использует ту самую Яндекс.Спамооборону, которая работает на Яндекс.Почте. И конечно эти сервисы замечательно работают и против железных ботов и против индусов из плоти и крови.

Надеюсь после этой статьи капч в интернете станет чуточку меньше. А если вы всё-таки не передумали использовать капчу, то используйте тогда reCAPTCHA от Google — она хотя бы помогает в нелёгком деле оцифровки бумажных книг.
reCaptcha

Комментов нет совсем... почему-то...

Писáть здесь

А еще у меня есть: