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

1. Классический вариант - графическая реализация

Самым популярным вариантом реализации является "графическая" captcha (позволю себе "обращаться" к этому слову в женском роде, просто из-за того, что по-моему оно так лучше звучит, не смотря на то, что по логике все же стоило использовать "он", так как при дословном переводе получилось бы слово "тест" с кучкой прилагательных и определений). Она представляет собой изображение, содержащее чаще всего какой-либо сильно искаженный текст или набор цифр, и перед посетителем ставится задача воспроизведения в текстовом поле, находящемся неподалеку, того что он/она видит на изображении. Большинству людей не составит труда прочесть и набрать на клавиатуре даже искаженный до неузнаваемости текст, а вот для программы данная задача является как минимум нетривиальной.

Существует некоторое количество алгоритмов (называются OCR), позволяющих программе пытаться понять что же за текст расположен на изображении. Эти алгоритмы разрабатывались для вполне мирных целей - для оцифровки книг и любых других напечатанных на бумаге документов. Но все же эти алгоритмы предназначены для распознавания аккуратно написанного текста черным шрифтом на белом фоне и являются плохо приспособленными для распознавания captch'и. Но все же существует довольно большое количество модификаций этих алгоритмов, приспособленных для чтения даже искаженного текста.

Казалось бы это существование таких алгоритмов делает бессмысленным использованием такого рода "защиты", но на практике это далеко не так: большинство из них пригодны только для распознавания только узкого набора реализаций графических captch, особенно это актуально для популярных готовых решений реализации этого типа защиты находящимся в свободном доступе в сети Интернет, а также сервисов, предоставляющих услуги по генерации такого рода изображений. Что делает довольно актуальным написание собственной реализации графической captch'и для появления уверенности в отсутствии готовой модификации OCR алгоритма, для преодоления используемой преграды. Об этом и пойдет речь в записи про собственноручную реализацию технологии CAPTCHA.

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

2. Сommon sense

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

3. Математический тест

Помимо просто перенабирания некоторого набора цифр с изображения, авторы captch'и могут попросить своего посетителя выполнить какую-либо несложную операцию (например: 2 x 2 = ???). Но такого рода тесты также далеки от идеала, так как в подавляющем большинстве алгоритм их решения прост для безобразия - вполне достаточно бывает базового OCR и реализации калькулятора внутри crawler'a, чтобы он смог преодолеть такого рода барьер.

4. Выбор изображения

Хочется также упомянуть один из достаточно оригинальных вариантов реализации, являющийся по сути вариацией на тему common sense captch'и, который меня как минимум удивил, когда я его впервые увидел на сайте одного из мобильных операторов рядом с формой для online отправки SMS. Суть его заключалось в том, что предлагался набор небольших фотографий, из которых предлагалось выбрать 2-4 изображения обладающих каким-либо свойством, например являющимися живыми объектами. Помимо позитивненького оформления и симпатичных фотографий, чисто технически такой подход является достаточно эффективным и легко реализуемым, единственное предъявляемое к такой реализации требование - достаточно обширная база данных изображений.

5. Выход за рамки стандартов

Большинство вещей, предназначенных для массового использования, принято делать по принципу "чем проще тем лучше". Обусловлено это тем, что количество пользователей обратно пропорционально уровню требований, к ним предъявляемых. Формы на интернет-страницах, как ни странно, исключением из этого принципа не являются, что является причиной их построения с использованием только базовых языков разметки - HTML, XHTML или в крайнем случае XML. Именно такую форму и ожидает увидеть spider, попадая на страницу. Но если поступиться этим принципом - легко поставить программу в тупиковое положение, задействовав какую-либо непривычную для нее технологию. В качестве примера в голову приходит Flash-ролик вместо изображения в графическом варианте реализации.

Этот способ является очень эффективным, но обладает существенными недостатками, такими как, например, необходимость использования современных браузеров с определенными plug-in'ами.

6. Скрытие разметки

В качестве продолжения предыдущей мысли: JavaScript предоставляет далеко не один способ скрыть внутри себя код разметки, что позволяет сделать вид, что формы как бы не существует (в основном базирующиеся на обратимом шифровании), заставляя программу подумать "да тут и заполнять-то нечего" и пройти мимо на какой-нибудь другой сайт. Все бы хорошо, только посетители сайта с отключенным JavaScript'ом формы тоже не увидят...

7. Звуковое воплощение

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

Вместо заключения хотелось бы предложить Вам подписаться на RSS этого блога.