x
 
Сергей
22 марта 2012

Очевидно, что бюро против капчи. Но есть сайты, которые реально страдают от мусора, получаемого с форм. Как вы обходитесь без проверки на робота?



Сергей!

Какую задачу решает капча? Кажется, ответ очевиден: значительно затрудняет автоматизированный спам сайта или накрутку счётчиков. Но одновременно капча — это презумпция виновности: пользователь, ты бот и спамер, докажи сайту, что это неправда. Это перекладывание проблем программистов на плечи пользователей: мы ничего не смогли придумать, чтобы предотвратить спам на сайте, поэтому решайте проблему сами — вводите капчу.

Для программиста капча выглядит, как серебряная пуля, но для пользователя она выглядит так:


или так:


Как же выжить без страшной капчи, не утонув в море спама, накрученых счётчиков и взломанных учёток? Признаюсь, у меня нет универсального рецепта и, скорее всего, его нет в принципе.

Зато есть методика борьбы с ботами. Для начала просто не надо делать капчу нигде, и, возможно, она вам никогда не понадобится. Если у вас сайт с посещаемостью до десяти тысяч человек в день и начался автоматический спам, вашу форму нашёл какой-то универсальный робот-спамер, который просто бездумно спамит, где может.

  • Вот несколько нехитрых приёмов для борьбы с бедой:
  • Переименуйте некоторые обязательные поля формы, например text или message в 0sfwa12dsa. Можно даже делать их динамически генерируемыми, но по какому-то правилу: к примеру третья буква — f, шестой символ — цифра, на конце a. Но не стоит делать так с полями, которые используются браузером для автоподстановки, типа имени и электронной почты.
  • Сделайте яваскриптовую проверку на «маусмув» и «кейап/даун» с каким-то хитрым алгоритмом передачи на сервер.
  • Сделайте проверку из переменных, но взаимозависимых значений в скрытых полях. Например, сгенерируйте яваскриптом два поля с числами и третье с их суммой, а на сервере проверьте, совпадают ли данные.

С очень большой вероятностью тупой бот перестанет вас беспокоить, если не с первой итерации, то со второй или третьей. Какой смысл его владельцу играть с вами в игру, в которой постоянно меняются правила, если у него ещё миллион сайтов, чтобы спамить?

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

Что касается голосований, то тут всё легче. Если ваш опрос шутливый («Кто победит в битве двух йокодзун: слон или кит?»), то нет никакого смысла защищать его. Если же важен каждый голос, то система должна учитывать голоса только узнанных ею пользователей (я намеренно не пишу «зарегистрированных пользователей», так как регистрация — тема другого разговора).

Единственное место, где, по моему мнению, уместна капча — это форма логина куда-то, где хранятся очень личные или финансовые данные пользователя. Но даже в этом случае она должна появляться после трёх-пяти неудачных попыток входа.

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

Определить, насколько похожи тексты, можно вычислив для них расстояние Левенштейна.

P. S.
Это был совет о разработке веб-интерфейсов. Хотите узнать всё об умной вёрстке, правильных скриптах, грациозной деградации, трюках и работе технолога с дизайнером? Присылайте вопросы.

Поделиться
Отправить

Комментарии

Егор Стремоусов
22 марта 2012

Для борьбы со спамом можно воспользоваться коллективным разумом. Например, в сервисе Akismet собираются и анализируются спам-комментарии со всего мира. Анализ позволяет получит их «сигнатуру», по которой в дальнейшем система автоматически определяет является комментарий желательным или нет.

Просто отправляйте ваши комментарии в сервис Akismet по API, а в ответ получайте вердикт: спам или не спам.

Евгений Волков
22 марта 2012

Еще можно в форме разместить «приманку» («honeypot») — это такое поле, которое невидимо, имеет какое-то специфическое название, чтобы робот захотел его заполнить. Например «адрес» в форме, где адрес не важен. Но это поле должно быть пустым, чтобы форма была валидной, то есть человек его не заполнит, потому что не подозревает о его существовании, а робот попадется в ловушку.

Дмитрий Кравчик
23 марта 2012

> форма логина куда-то, где хранятся очень личные или финансовые данные пользователя.
> Но даже в этом случае она должна появляться после трёх-пяти неудачных попыток входа.

В случае с финансовыми сайтами капча часто используется с первого раза при логине и ещё непосредственно перед проведением транзакции. Это нужно для защиты от возможного трояна, поселившегося на клиентском компьютере — а значит, возможно, имеющего доступ к кукам/паролям/сертификатам/кейлоггеру/итд и могущего действовать «от имени» юзера.
Например, так поступают Вебмани. Да, я знаю, что в целом у них просто чудовищный интерфейс, достойный помещения в кунсткамеру — но конкретно этот момент, мне кажется, имеет смысл.

Денис Чмель
23 марта 2012

После опознания можно всё еще показывать спам, но только тому IP который его отправил (полностью же удалять через день). Чтобы не было порыва обойти фильтр.

Александр Мядзель
28 марта 2012

Простые методы (динамическое добавление/изменение полей в формах и пр.), безусловно, отлично помогают распознать «случайных тупых ботов».

Но бывает и заказной конкурентный спам. Но даже и тут не обязательно показывать капчу всем подряд и сразу, можно показывать ее по некоторым условиям. Например, считывая «индекс доверия» IP-адреса (мне в этом помогали такие сервисы, как http://www.stopforumspam.com/usage или http://www.blocklist.de/en/search.html).

На сервере, не лишней будет проверка интервала времени между показом (генерацией) формы и получением ответа (отправки формы).

Кирилл Фадеев
20 мая 2012

По поводу рандомных скрытых полей — а если сервис будет использоваться не только пользователем, использующим браузер, но допустим имеется клиентское приложение, которое отправляет запросы — что тут делать? И это приложение — совсем не для спама, поверьте. Какой вариант тут можно посоветовать?


9 июля 2012

Кирилл!

Если вы разрабатываете сервис и знаете, что он будет нужен ботам, то вам нужно сделать АПИ для них.

Денис Шагимуратов
9 июня 2013

Добавлю несколько способов защиты в копилку:
1. Проверка поддержки Яваскрипта пользователем. Здесь важно применить какулю-либо JS-функцию (value.replace(), setTimeout()) сложнее, чем оператор присваиваиня («=»), такой метод отсеет 99% ботов.

2. Анализ времени заполнения формы. Здесь можно опытным путем определить минимум времени, необходимый для заполнения полей формы, если время заполнения ниже нормы, то это «звоночек».

3. Релевантный и тематический анализ текста, вводимого пользователем. В 99% случев спам не релевантен содержимому статьи/сайта, соответственно, такие тексты либо фильтруем полностью, либо отправляем на ручную модерацию.

Последний метод очень эффективен, фильтрует в том числе и ручной спам, но сложен в реализации, поэтому можно воспользоваться готовым решением — http://cleantalk.ru (я один из работочиков этого сервиса).


Цель рубрики — обсуждение вопросов дизайна всех видов, текста в дизайне и взаимоотношений дизайнеров с клиентами.

Мы публикуем комментарии, которые добавляют к уже сказанному новые мысли и хорошие примеры. Мы ожидаем, что такие комментарии составят около 20% от общего числа.

Решение о публикации принимается один раз; мы не имеем возможности комментировать или пересматривать свое решение, хотя оно может быть ошибочно. Уже опубликованные комментарии могут быть удалены через некоторое время, если без них обсуждение не становится менее ценным или интересным.

Вот такой веб 2.0.

Сайты для слабовидящих 2 За какими вещами нужно следить, чтобы при загрузке страница выглядела прилично? 1 С чего начать изучение ЦСС? 1 Как сделать, чтобы блок при прокрутке залипал у верхней границы окна браузера? 5