Оригинальная каптча. Часть 2 — Продолжение

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

    roman_tik +44
    «Рисовать мышкой несколько фигур — это геморой для реального человека...»
    knine +44
    «Мона Лиза»

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

    Немного теории.

    Подход современных каптч — дать решить такую задачу, которую легко решит человек, но не решит машина (хотя, в конце концов “истинный” ИИ, прошедший тест Тьюринга, все равно решит эту задачу). Но вместо этого основная часть каптчей генерирует символы, которые, якобы должен распознать человек, но не распознает машина. Современная же техника с легкостью выполняет обратную задачу (OCR), чтобы усложнить работу “распознавателя”, в каптчу вносят шумы, искажают симолы, тем самым ухудшая показатели распознаваемости и человеком.
    Вот, например символы каптчи: كلمة التحقق — они не на картинке и они не искажены, но не зная этого языка человек не поймет, что это и не пройдет тест, для машины же это просто точный набор символов. К чему это? К тому, что слово “автомобиль” это одно, а сам автомобиль — другое. Само слово “автомобиль” для машины знакомо, а вот понятие автомобиля для него не существует.
    Каким образом происходит обучение человека? Показываем ему автомобиль и объясняем что это “автомобиль”, показываем ему лошадь и говорим ему, что это лошадь (а так же животное, парнокопытное, живое существо и др.). Для машины такая задача тоже частично подвластна. И ещё, что автомобиль, что лошадь являются средством передвижения — для человеческого мышления этот вывод будет очевиден.
    Значит, стоит заставить машину оперировать не с символами, а например, с образами, которые машина не “понимает”. Казалась бы, какая разница, а разница в том, что символов в алфавите всегда конечное кол-во (даже иероглифов), а образов бесконечное множество. Хотя может показаться, что образов существует столько сколько и слов, но это не так. Например:
    image — это ключ;
    image — и это ключ;
    image — снова ключ;
    image — опять бьют ключи (казалась бы зачем бить ключи — лучше ими открыть двери).
    — а такого слова в русском языке вообще нет.

    Идея

    Соединив данную теорию, с наработками из первой статьи, я пришел к выводу выводить картинки и давать пользователю находить нужные с помощью образного мышления.
    Но стоп, эта идея не нова — такие каптчи уже существует. Но у них есть недостаток, чтобы не поддаваться взлому через перебор, картинок на сервере должно быть большое кол-во.
    Я же решил ограничиться малым кол-вом картинок. Для этого, чтобы исключить перебор, я решил накладывать картинки друг на друга. Вы можете отличить зад автомобиля от зада лошади? Думаю да.
    Осталось додуматься склеивать все картинки в одну и вместо номера картинки отправлять на сервер координаты (следовательно, расширив область возможных значений ответов) верной картинки.

    Реализация

    За день набросав код, получилась вот такая симпатичная каптча:

    Генерировать такую каптчу достаточно просто, в моем варианте существует всего 10 видов предметов по 3 вариации предмета каждого вида.
    При создании картинки из рандомных предметов, запоминаем координаты правильных ответов и вуаля, при проверке ответа пользователя проверяем вхождение отмеченных координат в исходные.
    <?php
    if (isset($_POST['check']) && isset($_POST['answer']) && $_POST['check'] == 1){
       $answerUser = json_decode($_POST['answer']);
       $answerCaptcha = unserialize($_SESSION['nncaptcha']);
       echo json_encode(array('checked'=>$answerCaptcha->checked($answerUser) ));
       exit();
    }
    ?>
    

    Вот и вся проверка.
    В живую каптчу можно глянуть тут. (осторожно слабый хостинг!)

    Это самая простая каптча из этой области, можно легко увеличить кол-во образов (как на каптче, так и в системе), можно не одинаково ресайзить мини-картинки, поворачивать картинки на разные углы, проделывать то же самое с текстом.
    Практически все это уже реализовано в этой каптче. В скрипте используется обычный GD, можно переписать на imagick — будет ещё больше возможностей (например в GD нет штатного функционала для поворотов на определенный угол картинки). Если, вдруг, кому будет интересно, в следующей статье могу выложить исходники с объяснениями (PHP 5.3).

    UPD1:
    Статистика прохождения:
    1. 50,9% — Успешно прошли
    2. 1,2% — Вышло время
    3. 47,9% — Ошиблись

    Всего проб (на данный момент): 12627
    Уникальных посетителей: около 6000

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

    Подробнее
    Реклама
    Комментарии 76
    • +15
      Еще и ограничение времени. Чтобы пользователь просто не успел понять что от него хотят.
      • +6
        Я так и не понял, что делать. Тыкаю на стулья — ничего не происходит. Да еще и со временем торопит.
        • 0
          Ох черт, оказывается если что-то перекрывает стул, то выходит ложный ввод.
      • +25
        У вас получилась капча из разряда: чем меньше пользователей -тем лучше. Особенно понравился вариант, когда под двумя гамбургерами был заныкан телефон и был не виден вообще. Примерно 3 раза из 10 я не успел ввести капчу. Думаю, что не стал бы регистрироваться на подобном ресурсе.
        • 0
          Ну я выставлял время по себе в среднем 10 из 10 я за 10 секунд ввожу. Увеличить время не проблема — но тогда «китайцы» будут успевать разгадывать.
          Наверно мне проще потому, что я раньше любил играть в подобные игры — там где надо было в интерьере находить «скрытые» предметы. Каптча получилась очень похожа на такие игры.
          • 0
            Можно ещё ограничить наложение — например, чтобы не возникало тройных и более наложений.
            • НЛО прилетело и опубликовало эту надпись здесь
          • +9
            3 из 3 fail. дальше не тсла продолжать
          • +2
            Ну да, я вижу карандаши и мячи, тыкаю в них. Ничего не происходит, а время кончается.
            Расстроился.
            • +8
              Обычная капча, у которой не подгружается нартинка с искаженными символами намного лучше справится с задачей не пускать пользователей на сайт.
              • +2
                Лучше посмотрите в сторону джаваскриптовых капч, где нужно рассортировать картинки. Например, есть картинки и надписи предметов. Нужно передвинуть изображение предмета на его название для всех картинок. Не нужен таймер времени, всегда можно исправить, если сразу пользователь ошибся или не так понял. В вашем же случае если промахнулся и раз кликнул не туда — уже фейл, плюс время подгоняет. Плюс читаем задание, а саму картинку не видим — очень уменьшает понимание того, что надо сделать.
                • +1
                  Увидел на одном блоге интересную капчу.
                  Ребята сказали, что это их разработка и скоро выложат капчу в паблик бесплатно.
                  Вот пример.
                  jacksoft.biz/wp-login.php
                  а тут они ее будут выкладывать в ближайшее время (сайт в разработке).
                  icecaptcha.com

                  P.S. Взял у них готовый плагин к вордпресу — на днях поставлю себе.
                  • 0
                    Как оказалось — эта капча не просто капча, а капча+сабмиттер формы…
                    • +2
                      Эта каптча легко взламывается. Всегда кружок и залитый только одним цветом (белый красный). Найти его автоматически можно простым перебором пикселей…
                      • –4
                        а дальше? координаты передаются в форму не в открытом виде и имеют сессионный ключ
                        • +2
                          Ключ вытаскивается из джаваскрипта, дальше в функции encode суммируются все цифры ключа и умнажается на координату, а дальше пихаются в скрытое поле и отправляются на сервер.
                          document.getElementById('pntcaptchacodex').value = encode(px+'');
                          document.getElementById('pntcaptchacodey').value = encode(py+'');
                          document.forms['loginform'].submit();
                          • –4
                            Чем это поможет сервисам типа антикапча?
                            Да, если написать СПЕЦИАЛИЗИРОВАННЫЙ кликер под эту капчу — все так. Но это накладно, а значит экономически невыгодно. Я не прав?
                            • +3
                              Все дело в статистике. Если ваша капча единична, что текст, что картинки никто ломать не будет. Ну а если вы хотите выложить капчу для всеобщего пользования или ваш ресурс интересен для спамеров, то как появится популярность — так ее и начнут ломать и писать ботов.
                              • –2
                                Это качается всех капч и систем защиты, включая и ту, которую предлагает автор статьи. Проблема качи автора статьи — отсеить ботов и юзеров, что будут делать люди с плохим зрением? А с нарушенной координацией? Я не защищаю ту капчу, что привел как пример я — но на данный момент, мне кажется, она сочетает и простоту для пользователя и достаточный уровень защиты. Поругайте меня…
                                • 0
                                  Ругаю — там кружочек маленький, пользователи смартфонов негодуют. Да что там говорить я на ипаде не всегда попадаю.

                                  Более того она не очевидна
                                  • 0
                                    сори, только до хабра добрался. Пожалуйста, что проще: распознать одноцветный круг или распознать искаженную букву, еще и с шумами? На вашу капчу бот пишется на ура даже новичком в этой области.
                        • 0
                          Очень user friendly. Жаль, взломать такую капчу очень легко — программно найти координаты однотонного кружка на пестрой картинке вообще не проблема.
                          • 0
                            Разработчики просили передать спасибо, за подсказку — кружочки сделают не однотонными, радиус и форма фигуры будет случвйно изменятся.
                            • 0
                              «Давайте поиграем с формой круга» это называется.
                              Проблема в том, что название понятное человеку, существует всего лишь для нескольких (около десятка) геометрических фигур. И для всех них можно написать относительно несложный алгоритм автоматического их нахождения. Что нужно искать — вытянут из самого текста страницы.

                              При увеличении степени неоднотонности, фигурки сначала станут нераспознаваемыми для людей и лишь потом для алгоритмов.
                          • 0
                            Одинаковый размер кружочков — мне кажется с этим легко справиться робот…
                            • +2
                              Меня постоянно спамят с помощью распознания рекапчи через сервисы антикапчи и капчабота. Эта капча через эти сервисы не пробивается — проверено. Софт типа Xrumer и Zeno тоже обламались. На данном этапе развития капча мне подходит :)
                              А дальше ребятам удачи ;)

                              P.S. Разработчики говоря, что фигуры будут рандомится и радиус изменятся — капча в стадии тестирования.
                            • 0
                              Разработчики без доступа на Хабр, попросили поругать усложненную капчу. Ссылка та же:
                              jacksoft.biz/wp-login.php
                              • 0
                                По-прежнему кружочек однотонный. Ищется так же просто.
                            • +1
                              Ни разу не прошел, хотя честно старался.
                              • 0
                                Угадал капчу 50/50 — епик феил… Плюс, время уже идёт, а картинка ещё грузится… или не грузится.
                                Всё-таки капча без капчи лучше чем с капчей.
                                • 0
                                  Я надеюсь, что автор ведет статистику из этих распознанных каптч. И думаю, что статистика неутешительная: людям тоже сложно распознавать такую капчу (у меня 2 из 10).
                                  • 0
                                    Веду статистику, самому ж интересно узнать. Другое дело статистика не скажет, что же там сложного в каптче — уменьшать ли кол-во картинок в каптче надо или убрать поиск сразу 2х видов предметов, в общем не понятно, а комментариях пишут сложно и все, без объяснений…
                                    • +18
                                      А вы думайте как человек, а не программист.

                                      В чем может быть проблема? Например там есть кресло, и мне кажется что кресло и стул у вас это разные вещи, а я периодически кликал на кресло думая что это стул.

                                      1) Уберите ассоциативно близкие элементы. Кресло = стул = табуретка = диван = лавочка.

                                      Ваша подача вопроса аля «1. Кресло 2. Глобус» — это вопрос для робота, а не для человека. Я у меня есть подозрение что цифры 1 и 2 — это количество элементов, которые надо отметить. Зачем эта фигня? Можно ведь написать генератор текста по шаблонам, или просто 5-7 фраз задать вида: «Тыкни в кресле на картинке, докажи что ты не робот, блеять!!!1!!111». Читать приятнее, словоформы в литературной речи усложнят работу роботу. Например «Тыкни по круглой фиговине» = «Тыкни в глобус» = «Тыкни на планету». С этим легче справится человек, а роботу придется писать шаблоны, очень зависящие от того, что вы легко измените — форму предложения.

                                      2) Сделайте человечное обращение к пользователю

                                      Нафига так накладывать картинки? Роботу уже сложно отличить машину от дивана. Вы же в прошлой статье писали про нейронки, я думаю имеете представление о сложности обученя робота для распознования дивана и машины на картинке? А с учетом того, что вы можете добавить туда 5 разных диванов и 5 разых машин — капчаломы и так опустят руки, без адских наложений. Не накладывайте так жестко картинки. Максимум — легкое пересечение процентов на 5-10 площади.

                                      3) Не накладывайте картинки друг на друга. Достаточно будет просто перетасовывать их и добавить пару десятков разных изображений одного и того же (10 машин, 5 диванов, 7 планет). Хотите добить робота? Сделайте наложение, но минимальное, если картинка лежит на картинке — это сложно для человека. Наложение должно быть максимум на 10-15 процентов площади.

                                      Ну и по поводу эффективности. Введите по больше элементов примерно одинаковой формы, например тарелки и планеты/глобусы. Тарелку от планеты человек отлечит легко, робот может потупить, особенно если тарелок и планет много.

                                      И в целом — делайте упор не на искажение изображение, а на обман восприятия робота. Как можно ломать эту капчу? Выкачать все картинки, искать по маске/уникальному фрагменту. Введите много картинок, сделайте динамическую тоновую и цветокоррекцию им. Пущай робот приводит их к Ч/Б, уже проблем ему подкините. Добавьте человечные просьбы к пользователю — роботу нужно учить ваш набор запросов, который вы можете легко изменять и дополнять. Введите по больше элементов, которые визуально схожи, но человек легко их различит. Тарелка и планета, вилка и ложка, машина (вид спереди) и диван.

                                      Уберите нафиг временное ограничение. Это НИКАК не влияет на возможности робота. Он рассчитает все (если сможет) за доли секунды. Геморой будет только у человека. Можете ввести ограничение на СЛИШКОМ быстрый ответ. Меньше чем за пол секунды такую капчу человек не сделает (если надо отметить два предмета, то разница между кликами должна быть не менее полу секунды, я гарантирую это). Автор же капчалома удивится что ответы его робота вроде бы верные, а сервер не признает его робота человеком — слишком быстро думает (это естественно на серверной части делать). Кстати иных причин запроса более одного предмета я не могу придумать.

                                      Ну вроде как-то так.

                                      • +1
                                        Забыл, отмечайте JS скриптом точки, где был клик. Это конкретно сбивает с толку — я не вижу где я уже кликал. Ставьте кружочек на месте клика.
                                        • +3
                                          Да, да, да, так же и хотел сделать, но забыл. (
                                          В целом все предложения дельные, со всем согласен. Как я уже внизу говорил картинки я взял первые попавшиеся из гугла, поэтому и разные размеры и ассоциативная схожесть…
                                          • +2
                                            Прочитал ниже что мое подозрение о количестве кликов подтвердилось. Это по моему так же зло. Или пишите «Отметьте все машинки» или «Тыкни по самой самой красивой машинке». Морзянку 2 раза по машине, 1 раз по ложке, 3 раза по планете — разводить не стоит.

                                            Не поймут-с, провинция-с.
                                  • 0
                                    Как минимум нужно убрать мелкие предметы, типа карандаша, сложно попасть мышкой.
                                    • +2
                                      Согласен, но не из-за того что сложно попасть мышкой — на самом деле не обязательно попасть четко в контуры объекта — карандаш лежит по диагонали, но картинка с прямоугольными координатами можно щелкнуть над ним или под ним все равно ответ будет верным, но вот найти этот мелкий предмет согласен сложно, особенно если он перекрыт.
                                    • +9
                                      Думаю как каптча, это вряд ли сойдет… но если добавить несколько уровней и рейтинг участников можно сделать неплохую мини-игру)
                                      • +3
                                        Лучше так

                                        Вместе с вами, сейчас эту капчу разгадывает %n человек.

                                        Чат должен быть в наличии
                                      • +1
                                        Сейчас у вас так:
                                        Робот видит на экране 9 объектов. Ему нужно выбрать 4 правильных объекта (сначала два одного вида, потом два другого вида). Допустим робот не знает, что ему нужно выбрать, и не понимает, что это за картинки ему показывают. Но он может прощёлкать 4 объекта просто наугад.
                                        Если он видит границы объектов, то шанс угадать верно (2/9) * (2/7) — это 6.3%, для робота, который может делать попытки в сотню потоков через сотню проксей, это уже очень круто и достаточно для доступа на сайт (даже если пройдут всего 600 спам-сообщений из 10к попыток бота — вам это уже создаст проблемы).

                                        > в моем варианте существует всего 10 видов предметов по 3 вариации предмета каждого вида.

                                        А с учётом того, что количество картинок ограничено (даже если будет на порядок больше, всё равно ограничено), можно сначала сграбить все картинки, вручную их распознать, далее распознавать текст запроса (какой вид объектов и сколько штук искать) и проходить эту каптчу ботом уже с вероятностью близкой к 100%.
                                        • +1
                                          Откуда робот знаем что ему надо выбрать щелкнуть именно 4 раза? Может быть от 2 до полностью всех — 9 (Сейчас цифру на каптче я вывожу, но можно и нет).
                                          Каким образом найти границу единичного объекта? Если 2 объекта наложились друг на друг и отдельно от остальных — для бота это будет единый объект — следовательно «сграбливать» такой слитый объект бесполезно для дальнейшого распознавания.
                                          • 0
                                            > Откуда робот знаем что ему надо выбрать щелкнуть именно 4 раза?

                                            Действительно, ведь даже человек это не всегда может понять:

                                            count fail
                                            • +1
                                              Издержки производства ) — надо отрегулировать длину слов.
                                              Поэтому я и вывел кол-во необходимых кликов. Осталось сделать цифру «плавающей» и роботу сложно будет её отследить (с учетом возможного попадания цифры в область картинок).
                                              Все равно для реальной каптчи надо брать подготовленные картинки, я же взял первые попавшиеся из гугла.
                                        • +2
                                          я робот =(
                                          • +4
                                            Тяжелая штука. Я где-то пять тестов провалил потому как сумку искал. А то сумма оказалась.
                                            • –1
                                              Такое ощущение как после похмелья, сразу не поймешь что это капча…
                                              • 0
                                                Отличная детская игрушка для развития)) Если использовать как капчу — то это жесть.
                                                • 0
                                                  открыть регистрацию на хабре и поставить такую каптчу. Посложнее, чем заработать инвайт будет…
                                                  image Нашел мобильные телефоны (если вот тот мобильник узкий не пульт ДУ), не нашел карандаши, только один. И что за сумма не понял, за зелеными очками не видать толком.
                                                  • +1
                                                    Вижу как два телефона так и два карандаша. Разве для этого нужна степень PhD?
                                                    • +2
                                                      я прошу прощения, где второй карандаш? Я серьезно не вижу, даже в очках (хоть и не доктор наук, но очки имеются). Сейчас присматривался долго, подозреваю что второй карандаш это тонкая соломинка, лежащая от мобильного телефона к очкам. Я прав? Спасибо.
                                                  • 0
                                                    Как только вижу на сайте упоротую капчу — тихонечко сайт закрываю. «За углом» тоже самое, только без желания вынести мне мозг своими капчами.
                                                  • +2
                                                    Предлагаю не хранить картинки вообще. Для поска картинок, соответствующих понятиям, можно использовать к примеру google picture search. Или какой другой сервис по поиску иконок типа findicons.com.

                                                    И да — картинки можно поворачивать, менять пропорции, сдвигать, менять цвета. Не стоит так уж сильно накладывать друг на друга. Пальцевый интерфейс не настолько точен.
                                                    • +7
                                                      Я считаю на Хабре надо запретить посты типа «У меня появилась идея новой капчи!»
                                                      • 0
                                                        Во-во. Хабр — не для садистов.
                                                      • +1
                                                        Надеюсь следующая ваша идея не будет еще хуже.
                                                        • 0
                                                          Как жить в стране, в которой ключ, ключ и ключ — это разные ключи?
                                                          • +1
                                                            Очередной фейл очередного «изобретателя» капчи :)
                                                            Ничего лучше обычных картинок пока не придумано. Правда, они обходятся автоматизированными сервисами типа anti-captcha.net
                                                            • 0
                                                              Кликать по картинкам — плохая идея. Чуть лучше, имхо, было бы показывать одну такую склеенную картинку, на которой нужно было бы разглядеть инородный предмет и уже его название отправлять на проверку. Название можно выбирать из списка.

                                                              Правда, все это возвращает нас обратно к большой базе картинок.
                                                              • +1
                                                                кто-то прошел эту каптчу? :)
                                                                • 0
                                                                  Я легко прохожу эту каптчу :) 10 из 10, т.к. понимаю алгоритм. Однако, надо отрегулировать всё, особенно наложение, чтоб накладывались они лишь частично, а не полностью один на другой по несколько штук.
                                                                  • НЛО прилетело и опубликовало эту надпись здесь
                                                                    • 0
                                                                      Мнэ… Сейчас почти вся капча аутсорсится на гастарбайтеров, суть хомо сапиенсов.
                                                                      Поэтому вопрос не в том, чтобы отсечь роботов, а в том, чтобы отсечь нерелевантных посетителей.
                                                                      Покуда я понял, что таким контролем может быть только контекстный вопрос — тот, на который не ответит гастарбайтер, и ответит вероятный клиент.
                                                                      Как формулировать вопрос — штука сложная, особенно в общественных местах где трудно объединить людей одним контекстом. Например разноплановый форум.
                                                                      Опять же есть слабо ориентированные ресурсы, скажем магазины, где любой гастарбайтер легко пройдёт капчу. (Правда у магазина есть другие механизмы — хоть бы и 1 доллар на депозите).
                                                                      • 0
                                                                        Мсье знает толк в извращениях.
                                                                        • 0
                                                                          Каждый третий топик в стиле «сделай сам» не обходится без этого коммента. Вам самим то это не надоело?)
                                                                          • 0
                                                                            Кто скажет, что это не извращение пусть первый кинет в меня камень.
                                                                            Но как бы там ни было, порыв и рвение я уважаю, и считаю что изобретать заново велосипед — очень полезное дело.
                                                                        • –1
                                                                          Если вторая картинка полностью закрывает первую, прокликать первую нет никакой возможности: считается что клик был на вторую картинку, и соответственно капча не проходится.
                                                                          • 0
                                                                            Лажа, выбираю 1 и 2, нажимаю отправить.
                                                                            Появляется алерт «неверное кол-во...»
                                                                            • +2
                                                                              • 0
                                                                                По-крайней мере человек старался и придумывал:)
                                                                                • 0
                                                                                  Самая лучшая капча — это её отсутствие.
                                                                                  • 0
                                                                                    Отличный квест. Когда следующая часть выйдет? :)
                                                                                    • 0
                                                                                      Вспоминается капча рапидшары с кошками.

                                                                                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.