Сборник сайтов Музыкальные открытки для вас Лампы, Светильники, Ксенон, Оптика, Выключатели, провод, Автолампы, Диспенсеры, Компрессоры, Сайт про Aion. База данных Aion

Проект "Исток"

KCAPTCHA — защита от спама

Среда 16 Декабрь 2009

CAPTCHA — это аббревиатура от английских слов «Completely Automatic Public Turing Test to Tell Computers and Humans Apart» — полностью автоматический тест Тьюринга для различения компьютеров и людей. Иными словами, это задача, которую легко решает человек, но которую невозможно (или крайне трудно) научить решать компьютер.

captchaПрименяются CAPTCHA для того, чтобы предотвратить множественные автоматические регистрации и отправления сообщений программами-роботами. Т. е. задача CAPTCHA — защита от спама, флуда и захвата аккаунтов.


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

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

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

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

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

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

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

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

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

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

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

KCAPTCHA — готовое решение

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

Проект KCAPTCHA ставит перед собой цель предложить программисту решение с одной стороны весьма защищенное, с другой — максимально малотребовательное к ресурсам и конфигурации хостинга.

Вот пример работы (изображение создается «на лету», обновите страницу для генерации других вариантов):

Принцип действия: скрипт заводит сессию и записывает в нее под именем $_SESSION['captcha_keystring'] случайным образом сгенерированную строку, после чего выдает изображение, содержащее эту самую строку в зашумленном виде. При проверке пользовательского ввода вам остается только прочитать из сессии кодовую строку и сравнить с тем, что ввел пользователь (подробнее об аспектах безопасности при проверке пользовательского ввода).

Системные требования: PHP версии 4.0.6 и выше с поддержкой GD версии 2. Не требуются ни библиотеки для работы со шрифтами (Libttf и др.), ни ImageMagick.

В комплект входит набор растровых шрифтов, так что скрипт, скорее всего, будет сразу готов к работе, не требуя установки дополнительных компонент.

Можно настраивать цвета и набор символов, применяемые при создании изображения.


Скачать самую последнюю версию и узнать больше про KCAPTCHA Вы можете на сайте разработчика www.captcha.ru