Защита web-сервисов от спама

Многие из вас видели, что в гостевых книгах, форумах, при регистрации новых пользователей часто в формах используется защита от роботов - кривенькие буковки и циферки. Этот вид защиты называется captcha. Вот, что по этому поводу сказано в Википедии:
 
CAPTCHA (английская аббревиатура от «Completely Automated Public Turing test to tell Computers and Humans Apart»...) - ... компьютерный тест, используемый для того, чтобы определить, человек ли использует систему... CAPTCHA чаще всего используется при необходимости предотвратить использование интернет-сервисов ботами, в частности, для предотвращения автоматической регистрации, скачивания файлов, массовых рассылок и т. п.

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

Мысль о создании чего-то такого, что человек сможет легко распознать, а робот никогда, прочно засела в голове. Первым пришел в голову пример, прочитанный когда-то давно в книге, посвященной искусственному интеллекту: как объяснить машине разницу между кошкой и собакой. Человеку достаточно одного взгляда, а попробуйте хотя бы рассказать, в чем отличия...

Распознавание образов - вот в чем компьютер еще не скоро сравнится с человеком. Отсюда и возникла идея, которую сейчас я предлагаю вашему вниманию.

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

Понятно, что робот может запомнить ваши картинки (ведь их не бесконечное количество) или просто кликать в одну из них до тех пор, пока не угадает - вероятность попадания очень большая. Здесь начинаются хитрости.

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

Вот пример такой captcha. Я просил покликать всех своих родственников, включая детей. Практически ошибок не было. Более того, это выглядело как игра (что, кстати, может дополнительно привлечь посетителей на ваш сайт).

Несколько слов о технической стороне реализации этой программы - мной использован PHP со стандартной графической библиотекой и совсем немножко Ajax. Если возникнут трудности с написанием такого скрипта - могу помочь.

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


Ярослав Полещук


Комментарии

18.01.2007, Алекс Экслер, exler.ru
Эти вещи давно обсуждаются в интернет-сообществе. Есть масса всяких решений. На данный момент голову себе особо можно не морочить - тест Тьюринга роботы толком не обходят - это давно проверено. Да им и смысла особого нет этим заниматься. Кроме того, есть намного более простые способы отсечь робота - например, попросить решить простейшую арифметическую задачу, используя комбинацию цифр и слов, например: "сколько будет 2 плюс 5".
ЯП
Да, согласен, на сегодняшний день распознавание букв и цифр в традиционных captcha еще не приняло массового характера. Есть несколько десятков самых распространенных, которые известны роботам, а до остальных, тем более самодельных, пока дело не дошло. Однако, давайте вспомним, что еще совсем недавно обычный спам на почтовые ящики не был таким изощренным, как теперь. Алгоритмы и технологии спамеров подстраиваются под окружающую среду и мутируют очень оперативно. Кто даст гарантии, что они не обратят свой пристальный взор на web и не начнут атаковать гостевые и форумы с таким же упорством? Вот тогда они обязательно изобретут способ распознания традиционных captcha, пускай даже способы деформации будут меняться владельцами каждый час . Повторюсь - очертания букв всегда останутся одинаковыми.
Что касается арифметических задач - сколько вы можете придумать таких примеров? Даже если и сто - вероятность угадывания ответа соответственно 1/100 - роботу на полсекунды.

23.01.2007, Несколько конструктивных замечаний с форумов mastertalk и searchengines
1. Трудности с пользованием:
- Да, тяжёло для меня это пока искал где там листья где че)
- вот это ребусы))) хорошо хоть кроссворд разгадать не просят..
- У меня на ввод капчи ушло около 30 секунд - долго искал листья. В обычной ситуации я бы не стал тратить столько времени.
2. Качество предлагаемых картинок
- Картинки надо просто попроще, зачем такие сложные и многоцветные? 256 цветов и на размере положительно скажутся и сами картинке по структуре более явные, а не вырезки из обоев, тогда по мойму все будет ок.
3. Возможность обхода роботами
- перебором пробьют, если конечно смыл будет туда пролезти точнее ..если такие капчи будут в массовм порядке ставится
ЯП
1. Заранее следует оговориться: завсегдатаи этих форумов - это специалисты по оптимизации и раскрутке сайтов. И одним из видов их деятельности является регистрирование ресурсов во всякого рода каталогах, количество которых исчисляется сотнями. Естественно, что для них критичным является время заполнения формы. Однако, давайте вдумаемся - чем принципиально такая работа отличается от деятельности тех же роботов? Если владелец каталога скурпулезно и трепетно отбирает сайты - а ему сыплятся заявки на внесение со скоростью звука? Конечно, некоторые каталоги мечтают иметь в себе миллионы ресурсов никем не отобранные - тогда каптча вовсе не нужна.
Давайте представим себе человека, пишущего сообщение в гостевую или владельца сайта, который он хочет зарегистрировать. Представьте себе, как он заполняет форму - вдумчиво, никуда не торопясь. В этом случае кликнуть по каптче не составит большого труда.
Я все это к чему говорю: никто не утверждает, что этот вид captcha является универсальным - в некоторых случаях можно вообще без нее обходиться, а в некоторых - ввести 3 цифры и на этом остановиться.

2. Дествительно, подбор фона и самих картинок - это чуть ли не самая трудная и важная составляющая этой программы. Здесь все зависит от владельца. У меня даже была мысль подобрать вообще черно-белые изображения или что-то типа гравюр.
С другой стороны, вспомните те случаи, когда вам приходилось распознавать традиционные captcha. Наверняка, случались и отрицательные результаты - 1, I, l или 0 и О, а иногда просто фон или искривления вообще доводят до неузнаваемости ту или иную букву. Погрешность неизбежна и не стоит ее бояться.

3. Теперь по поводу обхода роботами этой защиты. Здесь мои изыскания шли в двух направлениях - невозможность распознания каптчи роботом и наименьшая вероятность угадывания. Для решения первой задачи применяются методы, описанные в статье.
Несколько цифр по второму направлению. Поле каптчи 300 х 200. Сторона фрагмента картинки 60. Следовательно картинок может уместиться около 15 штук. Вероятность угадывания нетрудно посчитать: 1/15 (Кстати, на форуме приводился пример всего с тремя картинками - робот угадает в худшем для него случае с 5 раз)
Для уменьшения вероятности можно пойти двумя путями - либо увеличивать количество укладываемых картинок, либо задавать не один вопрос, а несколько. В предложенном варианте 3 вопроса дают вероятность угадывания в 1/2730, что уже значительно лучше. Тут нужно прийти к разумному компромиссу между сложностью для робота и сложностью для человека.

24.01.2007, Yukko, Зачем заставлять людей думать
не заставляйте меня думать ;) есть решения, которые отлично защищают от спама и не заставляют меня думать.
ЯП
Не удержался, чтобы не выставить. Это правда жизни...

6.03.2007, Sam
Вот в продолжение: rmc.net.ru/article/web/antispam_no_captcha/
ЯП
Мысли, подобные изложенным в этой статье часто встречаются на ресурсах, посвященных защите от спама web-форм.
Вкратце изложу суть: спамерские роботы автоматически находят по Интернету страницы с формами и автоматически их заполняют. Практически без участия людей. Предлагается манипулировать с полями ввода - изменять их названия, делать невидимые поля для проверки и т.п.
На самом деле, действительно, какое-то время (возможно продолжительное) это будет срабатывать. Но вот небольшая цитата из блога http://ru-traff.blogspot.com/2007_01_01_archive.html
"... открыл я коменты и сразу повалили спамеры, в основном из US и Индии. И спам начал валить не такой как в ... рунете, в стиле - "Пожалуйста посетите мой сайт! Там много новых игр!". Ихние спамеры - Жгут! Спам весь набивается ручками и под каждую статью. К примеру: один чувак пишет - "Спасибо, чудесный пост! Читая этот пост я вспомнил фильм.. блаблабла... Читая этот абзац я вспомнил как мой отец говорил.." и так пару абзацев и только в конце ставит текстовую ссылку на свой блог где он пишет о том же."
Возможно, это не совсем по теме, но просматривается явная тенденция - спамеры усовершенствуются. Честно говоря, если бы я был спамером я бы вручную заносил куда-нибудь в базу данных свойства конкретной формы, и только потом бы засылал спам.
Маркетинг предприятия, международный маркетинг GoogleslashdotYahooMyWebDiggTechnoratiDeliciousBobrdobr

Форма для связи

Внимание! Все поля нужно заполнить обязательно!
Ваше имя
Ваш e-mail
Укажите адрес почтового ящика, с которого Вы хотите в будущем переписываться
Тема
Сообщение  
Для отправки сообщения кликните на картинки в следующем порядке:
  • листья
  • бабочки
  • огонь