Как начинался компьютер
Компьютерная революция
Двоичный код
Разработки военных лет
Интегральные микросхемы
Микрокомпьютер
Персоны
Сеть
Язык компьютера
Развитие ПО
Гибкие системы
Средства разработки
Информатика
Вычислительная наука
Операционные системы
Искусственный интеллект
Предыстория
Поиск
Знания и рассуждения
Логика
Робототехника
 

 
CAPTCHA Печать

CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart — полностью автоматизированный публичный тест Тьюринга для различия компьютеров и людей) — торговая марка Университет Карнеги-Меллона, компьютерный тест, используемый для того, чтобы определить, кем является пользователь системы: человеком или компьютером. Термин появился в 2000 году. Основная идея теста: предложить пользователю такую задачу, которую может решить человек, но которую крайне трудно научить решать компьютер. В основном это задачи на распознавание символов.

Алгоритм CAPTCHA-проверки

Кратко рассмотрим алгоритм CAPTCHA-проверки посетителя, сделав упор на защиту от уязвимостей, не связанных с собственно распознаванием картинки:

Пользователь заходит на защищаемую страницу, мы создаем для него сессию. Лучше всего, если эту сессию будет создавать сама CAPTCHA-картинка (вернее, скрипт, которые ее выдает).

Скрипт генерирует случайный текст, записывает его в сессию и выдает картинку с этим текстом посетителю. Потом, при проверке, ответ, введенный посетителем, сравнивается с эталоном, сохраненным в этой сессии.

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

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

Генерация кода самой картинкой позволяет реализовать функцию "получить другой код, если этот плохо читается пользователем" — будет достаточно обновить только картинку.

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

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

Если вы обратите внимание на эти моменты, ваша CAPTCHA будет защищена от ботов, не использующих распознавание.

Альтернативные способы защиты

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

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

Аудио-CAPTCHA

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

Математические примеры

Некоторым может показаться, что вопрос "сколько будет 23+75" может быть хорошим решением, т. к. "боту надо будет еще догадаться, что числа следует не только распознать, но и сложить". При здравом же рассуждении видно, что какую-то защиту это решение может обеспечить только в силу своей новизны и малой распространенности. В самом деле, что-что, а складывать и вычитать числа компьютер умеет гораздо лучше человека. А вот для самого человека проведение в уме математических действий (особенно если цифр в числах не 1−2, а больше) будет утомительным и сложным. Сумму же одно-двузначных чисел можно угадать и перебором со сравнительно небольшим количеством попыток. Таким образом, в математических примерах как способе защиты от ботов смысла нет никакого, наличествует даже ухудшение защищенности.

Текстовые задачи

Человеку задается вопрос или загадка, на который он должен дать ответ. Ответ нужно либо выбрать из списка, либо ввести в поле. Посколько при выборе из списка вероятность дать правильный ответ наугад довольно велика (1/n, где n – количество вариантов), обычно пользователя заставляют ответить на ряд вопросов, ибо вероятность угадать правильные ответы на несколько вопросов будет произведением вероятностей ответить на каждый из них. Т. е., к примеру, 1/5 * 1/6 * 1/4 = 1/120.

Преимущества: проверка доступна для людей с нарушениями зрения, а также для тех, кто пользуются клиентами, не отображающими изображения.

Недостатки:

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

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

Распознавание предметов

Здесь пользователя просят узнать изображенные на картинке предметы (людей, животных). Ему либо показывают предмет и просят ввести его название (или выбрать его из списка), либо, наоборот, пишут название, а из нескольких предложенных предметов просят выбрать запрошенный (запрошенные). Детали реализации могут варьироваться для уменьшения вероятности угадать наобум, указывать требуемые предметы могут попросить в определенном порядке и т.д.

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

Преимущества: пользователю может быть легче отличить кошку от собаки, чем различить, к примеру, сильно искаженные и зашумленные буквы "N" и "H". Боту же, напротив, буквы, как более простые образы, различить будет проще.

Недостатки:

  • Пользователю должны быть знакомы объекты и их названия.
  • База картинок должна быть довольно значительной, чтобы было невозможно распознавание через сравнение с эталонами. Либо нужно будет озаботиться хорошими алгоритмами искажения или даже генерации картинок.