Альтернативные способы защиты от ботов можно разделить на две части: те, которые требуют от посетителя каких-то действий, и те, которые этого не требуют. Эффективность этих способов зависит как от сложности создания алгоритма распознавания, так и от распространенности того или иного решения, ведь связываться со взломом даже примитивно, но необычно защищенного сайта средней популярности, скорее всего, не станут.
Существует множество идей CAPTCHA-защиты, отличающихся от классического варианта "введите код, изображенный на картинке". Их можно также разделить на две основные части: задачи, обращающиеся к "рефлексам" пользователя (на узнавание-распознавание), и задачи, обращающиеся к его логике (вопросы, задачи). Первые приятнее для пользователя, т. к. не заставляют его думать.
Аудио-CAPTCHA предлагает пользователю прослушать некую фразу и затем ввести ее. Обычно фраза состоит из проговариваемых цифр, как правило, с варьируемой тональностью, паузами и фоновыми шумами. Преимущество у аудио-CAPTCHA в том, что на такой вопрос сможет ответить пользователь с нарушениями зрения. Недостатки – посетитель должен иметь на компьютере оборудование для воспроизведения звука; распознавание речи – не настолько сложная задача, поэтому степень защищенности такого решения, как правило, невысока. К тому же реализация звуковых искажений довольно требовательна к квалификации программиста и ресурсам сервера. Это ведет к тому, что аудио-CAPTCHA применяется довольно редко и только как альтернатива для слепых пользователей.
Некоторым может показаться, что вопрос "сколько будет 23+75" может быть хорошим решением, т. к. "боту надо будет еще догадаться, что числа следует не только распознать, но и сложить". При здравом же рассуждении видно, что какую-то защиту это решение может обеспечить только в силу своей новизны и малой распространенности. В самом деле, что-что, а складывать и вычитать числа компьютер умеет гораздо лучше человека. А вот для самого человека проведение в уме математических действий (особенно если цифр в числах не 1−2, а больше) будет утомительным и сложным. Сумму же одно-двузначных чисел можно угадать и перебором со сравнительно небольшим количеством попыток. Таким образом, в математических примерах как способе защиты от ботов смысла нет никакого, наличествует даже ухудшение защищенности.
Человеку задается вопрос или загадка, на который он должен дать ответ. Ответ нужно либо выбрать из списка, либо ввести в поле. Посколько при выборе из списка вероятность дать правильный ответ наугад довольно велика (1/n, где n – количество вариантов), обычно пользователя заставляют ответить на ряд вопросов, ибо вероятность угадать правильные ответы на несколько вопросов будет произведением вероятностей ответить на каждый из них. Т. е., к примеру, 1/5 * 1/6 * 1/4 = 1/120.
Преимущества: проверка доступна для людей с нарушениями зрения, а также для тех, кто пользуются клиентами, не отображающими изображения.
Недостатки:
Можно пытаться комбинировать текстовую задачу с задачей на распознавание, к примеру "введите первую, третью и четвертую буквы из предложенной надписи", но это экстенсивный путь, ведущий к, скорее всего, кажущемуся увеличению сложности прохождения теста ботом.
Здесь пользователя просят узнать изображенные на картинке предметы (людей, животных). Ему либо показывают предмет и просят ввести его название (или выбрать его из списка), либо, наоборот, пишут название, а из нескольких предложенных предметов просят выбрать запрошенный (запрошенные).
Детали реализации могут варьироваться для уменьшения вероятности угадать наобум, указывать требуемые предметы могут попросить в определенном порядке и т.д.
Реализация, где именно картинки являются ответами на вопрос ("укажите всех кошек") в противоположность "что изображено на картинке" представляется более перспективной, т. к. меньше напрягает пользователя, не требует раздумывать над синонимами при вводе ответа вручную и не требует проводить утомительный поиск среди текстовых вариантов ответа.
Преимущества: пользователю может быть легче отличить кошку от собаки, чем различить, к примеру, сильно искаженные и зашумленные буквы "N" и "H". Боту же, напротив, буквы, как более простые образы, различить будет проще.
Недостатки:
Человек отличается не только от компьютера, но даже от животных тем, что обладает "чувством прекрасного" и родственным ему "чувством справедливости". На этой основе можно попытаться строить тест подтверждения "человечности". К примеру, это может быть список изображений людей, среди которых надо выбрать самых красивых. Либо это будут вопросы, подразумевающие нравственный выбор. Либо музыкальные фразы, гармонические или нет (если, конечно, "поверка алгеброй гармонии" невозможна).
Преимуществом может быть то, что эти решения будут базироваться на "одушевленности", более высоком начале в человеке, которое, возможно, компьютер вообще никогда не будет способен достичь.
Недостатками может быть субъективность оценки "прекрасности", сложность генерации заданий (к примеру, если мы генерируем изображения красивых лиц в соответствии с некоторыми соотношениями размеров и расположения глаз-носа-ушей и пр., то почему эти соотношения не использовать боту-распознавателю?)
Эти способы призваны обеспечить отсечение ботов при том, чтобы не напрягать пользователя решением зачастую утомительной задачки на "человечность".
Система может как ограничивать количество запросов, так и пытаться отличить человека от бота по косвенным признакам в поведении.
Ограничение количества запросов с одного IP-адреса – это довольно простой способ, малоэффективный, правда, при достаточной подготовленности атакующего. Не секрет, что существуют компьютеры, называемые "анонимными прокси", которые позволяют делать запросы через себя, в результате чего сайт видит в качестве IP-адреса посетителя адрес этого прокси. Злоумышленник может использовать большое количество этих прокси, создавая иллюзию того, что к сайту обращаются разные люди. Ограничение через выставление посетителю cookie также малоэффективно, их легко можно стереть или вовсе игнорировать.
Потом, ограничение количества запросов от одного пользователя имеет смысл, когда мы защищаем сайт, на который злоумышленнику выгодно делать много запросов, к примеру, он регистрирует почтовые ящики и рассылает спам.
Если же это форум или гостевая книга, то для них характерна иная ситуация – много спамеров оставляют каждый по небольшому количеству сообщений. В результате общее количество запросов ботов велико, но каждый из них никаких лимитов не превысил.
Ограничение по IP имеет смысл тогда, когда заставлять пользователя решать CAPTCHA нельзя, но защититься надо. К примеру, так делают поисковые сайты.
Косвенные признаки потому и "косвенные", что не дают гарантии, а только увеличивают вероятность, что бот "не пройдет".
К примеру, в формах регистрации делают невидимые для пользователя поля с расчетом на то, что бот, анализируя не внешний вид страницы, а ее HTML-код, эти поля заполнит и этим выдаст себя. Либо переименовывают названия полей, к примеру, поле "электронная почта" назовут "name", а "ваше имя" – "email", опять же с расчетом на то, что бот примет решение о смысле полей по атрибуту name у тега <input>.
Вообще, можно придумать большое количество проверок, базирующихся на том, что среднестатистический бот, в отличие от полноценного браузера, не обучен интерпретировать CSS, JavaScript, Flash и пр. Хотя есть и боты, использующие движки браузеров.
Защитой может быть ограничение на время, прошедшее между загрузкой формы и ее отправкой – человеку, в отличие от бота, явно должно потребоваться некоторое время на ввод данных.
Поскольку целью спама на форумах обычно является увеличение количества ссылок на некий продвигаемый сайт, можно запрещать пользователям (всем или не доказавшим своей "человечности", к примеру, количеством оставленных сообщений или репутацией) размещать ссылки в сообщениях и личной информации.
Однако повторюсь, что косвенные методы по определению менее эффективны, чем CAPTCHA, поэтому подавляющее большинство (если не все) крупных сайтов, борющихся с использованием их сервисов ботами, использует CAPTCHA-задачи. Ибо косвенные методы защиты рассчитаны на то, что бот тем или иным образом проявит свою сущность, а не на то, чтобы поставить перед ботом принципиально сложную для него задачу.