Классика или инновации: взлом Ajax Fancy Captcha

На одном из последних проектов встала необходимость добавления капчи к форме. Причем не обычной текстовой капчи, а дружелюбной. Заказчик хотел манипуляций с картинками, и я сразу вспомнил неординарную капчу от webdesignbeach.com.

Восхищение

Да, она симпатичная:

Последнее демо можно увидеть прямо у ребят на сайте, в форме комментариев.

Я заинтересовался самой капчей и, невольно, тем, как она работает.

Из описания на сайте:

It calls captcha.php file and gets a random number. Php file just generates simple number and put it in session. When AJAX got that number it creates items based on that number. Lets imagine that we have array of “pencil”, “scissors”, “clock”, “heart”, “note”, so if number 3 is returned it will take “heart” and look for item-heart.png file in /imgs directory.

Помеченное красным я прочитал внимательно, остальное как-то проплыло  мимо, да и особо уже не имело значения.

Немного времени ушло на то, чтобы понять что Ajax Fancy Captcha — полностью декоративна и непригодная для боевых условий. И хоть разработчик утверждает что

Captcha’s security level is medium

Это совсем не так.

 

Взлом

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

Алгоритм "взлома" (как по идее и алгоритм мышления злоумышленника) следующий:

1) Загружается тот самый captcha.php, который генерирует номер (от 0 до 4х), сохраняет его в сессии и отправляет в ответе клиенту.

2) Этот же номер отправляется в post-запросе под именем "captcha" вместе с полями формы по адресу извлеченному из формы.

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

Идея по улучшению

UPD: Идея моя оказалась немного баянной — подобный функционал уже реализован в jquery plugin'е под названием jQuery simpleCaptcha , за тем лишь исключением, что я предлагал динамически менять имена изображений, а у товарища Jordan'а Kasper'а имена изображений статичны, что в свою очередь позволяет легко обучить бота.

Собственно суть, хотя наверное америки не открою:

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

2) СЕРВЕР: Выбрать одно изображение и суть его отправить снова таки на клиент

3) КЛИЕНТ: принять хеши и вопрос о том, что нужно выбрать.

4) КЛИЕНТ: При выборе/перетаскивании картинки отправлять на сервер выбранный хеш.

5) СЕРВЕР: Сопоставлять присланный хеш с сутью изображения, сохраненной в сессии.

Feedback

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

В feedback им отпишусь сейчас, хотя видимо его никто давно не читает.

Полезно(0)Бесполезно(0)
Комментарии закрыты.