company_banner

«Я не робот»: история Яндекса о том, как победить ботов, а не людей

    Никто не любит капчу. Угадай слово по плохой картинке, собери пазл, отличи светофор от гидранта, сложи два числа и так далее. Формы бывают разные, но суть всегда одна: мы тратим своё время и нервы.

    Чуть больше года назад моя команда взялась за модернизацию старой капчи Яндекса. Обычно в таких задачах стремятся повысить качество и полноту отсева ботов, оставив человеку шанс прорваться через капчу. Но мы зашли с другой стороны: решили сделать капчу более дружелюбной к людям, не ухудшив при этом защиту от ботов. Казалось бы, наивный подход. Но у нас получилось.

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

    Несколько слов о том, зачем нужна капча. Уверен, это и так не секрет, но историю всё же стоит начать с основ, чтобы быть на одной волне.

    Капча — это инструмент, который помогает сервису понять, обратился к нему человек или робот. Это полезно, потому что роботы создают нагрузку или даже занимаются откровенным вредительством. При этом нужно показывать капчу не всем, а только тем, чьи запросы похожи на автоматические. Для этого надо проанализировать запрос. Анализ — это уже давно не просто подсчёт числа заходов с конкретного IP. Факторов для анализа намного больше, чем один. С другой стороны — сервис с нагрузкой в сотни тысяч RPS и с жёстким требованием к скорости ответа пользователю. Если снизить скорость ответа, то пострадают пользователи. Если снизить полноту выявления ботов, то в итоге опять же пострадают пользователи. Значит, нужно искать баланс между этими крайностями. И получается, всегда будут люди, которым покажут капчу.

    Первые шаги

    Год назад наши пользователи видели примерно такие задания:

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

    В целом ничего жуткого, да? Но могу и жути нагнать. Вот примеры более сложных (но крайне редких) вариантов:

    Мы, конечно, такое вычищали. Использовали для этого как классификаторы неоднозначно читаемых картинок, так и данные о поведении пользователей (если человек даже не пытается ввести текст, то это плохой сигнал). Но и после таких изменений людям было очень сложно. Можно сказать, что старая капча отлично экономила ресурсы: её не могли пройти ни боты, ни люди. Только 35% реальных пользователей справлялись с первой попытки. Очень страшное число. Нужно было что-то менять.

    Начали с анализа наиболее частых ошибок. В топе оказались знаки препинания, верхний и нижний регистр букв, лишние пробелы. Посчитали, как у ботов с этими проблемами. Оказалось, что можно безболезненно отказаться от их учёта при проверке результата. Эти элементарные, быстрые решения принесли нам с ходу +15%. Но дальше простые идеи закончились. Нужно было подойти к задачке более глобально.

    Свои картинки с текстом

    Поговорим о картинках. Так как их мы не генерировали, а вырезали из готовых, иногда там встречались очень необычные тексты. Их вы уже видели выше: это и перевёрнутые штрихкоды, и логарифмы. Их можно фильтровать с переменным успехом, но гибкости в работе с ними нет. Нельзя оперативно управлять сложностью, контролировать допустимый словарный запас, выбирать язык для разных стран. Если хочешь полностью контролировать качество капчи, то выход только один — генерировать картинки самостоятельно. Так мы и поступили.

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

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

    Лёгкий шум превратил горы в собаку и рыбку в краба. Источник: https://arxiv.org/pdf/1710.06081v2.pdf
    Лёгкий шум превратил горы в собаку и рыбку в краба. Источник: https://arxiv.org/pdf/1710.06081v2.pdf

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

    Задачу распознавания текста нейросетями сейчас решают хорошо, причём уже далеко не только лидеры индустрии. Но трудные задачки по-прежнему встречаются. Наиболее сложные датасеты с распознаванием слов на сегодняшний день представляют собой сильно искривлённые тексты (irregular text recognition).

    Это то, с чем человек справляется относительно просто. Но не робот. Этот подход мы применили и у себя. Пример такой капчи:

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

    Скриншот с одного из «секретных» форумов об автоматизации
    Скриншот с одного из «секретных» форумов об автоматизации

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

    Полезная и добрая капча

    Успех с генерацией собственных картинок воодушевил нас. Мы осознали, что капче не обязательно быть исключительным злом в глазах пользователей. Она может быть такой, какой мы захотим её сделать. Например, полезной для людей.

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

    Ещё примеры:

    Другой пример работы с капчей, чуть ближе к концу 2020 года. Хотелось немного поднять пользователям настроение. Придумали использовать для генерации капчи не какие попало слова и фразы, а только те, что несут положительный эмоциональный заряд. Проще говоря, такие слова, которые как минимум не портят настроение ещё больше, а в идеале улучшают его.

    Собрали данные с помощью толокеров. Сгенерировали. Получили капчу, которая содержала фразы «Приятных эмоций», «Вам всё по плечу», «Продуктивного дня» и подобные.

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

    Капча без капчи

    Вернёмся в самое начало нашей истории. Там я рассказывал о том, что капчу предлагают только тем пользователям, чьи запросы в результате быстрого анализа показались нам подозрительными. Быстрый анализ отрабатывает примерно за одну (!) миллисекунду. Делать это дольше без вреда для высоконагруженного сервиса и миллионов пользователей нельзя. Это значит, что нужно использовать быстрые алгоритмы, а они не всегда самые точные. Из-за этого люди видят капчу. Как можно обойти это узкое место? Использовать промежуточный шаг!

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

    Теперь это работает так. Если человеку не повезло попасть на страницу с капчей, то вместо капчи он видит предложение поставить галочку и подтвердить, что он не робот.

    Пока пользователь ставит галочку, мы проводим дополнительный анализ с использованием более сложной ML-модели. Если всё хорошо, то возвращаем на сервис. Если «подозрительность» сохраняется, то показываем текстовую капчу.

    И ещё кое-что важное. Переход от бинарных вердиктов (бот — не бот) на первом этапе к вероятностным («робот на N%») на втором позволяет нам управлять сложностью капчи! Если на втором этапе мы по-прежнему считаем запрос подозрительным, но степень уверенности в этом не такая высокая, то показываем простейшую капчу. А вот если мы уверены, что перед нами робот, то можем сложность и приподнять. Простое, но эффективное решение.

    Несколько слов о значимости этого решения для людей. Выше мы радовались тому, что 85% (а не 35%, как было раньше) пользователей справляются с новой текстовой капчей с первой попытки. Но с галочкой «Я не робот» ситуация изменилась радикально: теперь более половины пользователей возвращаются в сервис вообще без необходимости разгадывать капчу! Вот такая вот капча без капчи.

    За последний год мы прошли длинный путь, но идей на будущее от этого меньше не стало. Мы уже работаем над тем, чтобы получать более точные вердикты в реальном времени и без перенаправления на промежуточные страницы. И уже есть первые успехи. Один частный пример: теперь в Safari в режиме Инкогнито встретиться даже с галочкой «Я не робот» вероятность примерно в десять раз ниже, чем раньше. Кроме того, хотим пробовать новые, более добрые форматы капчи для тех случаев, когда без неё никак.

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

    Яндекс
    Как мы делаем Яндекс

    Комментарии 116

      +32

      Уважаемый Яндекс, я вот не робот, честное пионерское. Но капча ваша уже нереально задрала. Почему она вылезает, даже если пользователь залогинен, если из этой же сети стучится к вам ваша же колонка с Алисой? Всего-то стоило настроить IPv6 от HE. И даже белый статический IPv4 не спасает, хотя в tcpdump видно обмен с вашими сервисами, используя оба протокола. Раз вы презентуете себя как компания, славящаяся ML, то может стоит при обучении динамически учитывать еще и подсети своих пользователей, чтобы не заставлять их страдать?
      P.S. Одна ваша капча однажды очень повеселила, попросив ввести фразу Avoid Smiling, напомнив что да, не время нынче улыбаться:)

        +5
        Спасибо за отзыв! К сожалению, роботы умеют имитировать людей (любой признак, в том числе авторизовываться в Я и прочее), поэтому полностью исключить ложноположительные срабатывания сложно. Но каждый такой пример помогает нам учиться. Поэтому прошу вас при следующем появлении капчи нажать на «обратную связь» и прислать нам детали. В текст сообщения допишите «привет от redneko с Хабра». Обязательно посмотрим.
          0

          Алексей, спасибо за обратную связь. Попробую сделать как вы сказали.

            +4

            И теперь вам все ботоводы массово начнут слать обратную связь через ту кнопку, дописывая приветы с Хабра, в надежде что ваша модель пока обучается посчитает что это люди =]

              0
              Могу сразу сказать, что это не поможет роботам )
              +4

              То, что боты могут логиниться — ок.
              Но почему каждый раз, когда я в инкогнито залогиненый (с рабочего компа) под аккаунтом с активным яндекс такси и привязанной картой с реальными оплатами, он всё равно спрашивает капчу.
              Неужели для капчи не происходит проверка на акк-пустышку и реальный "человеческий"

                +2
                В зависимости от вашей продвинутости, вы сами можете запустить парсер яндекса, либо же за вас это мог сделать ботнет. Технически и то и то — это просто ещё одна вкладка или окно вашего же браузера со всеми вашими сессиями.
                +2
                поэтому полностью исключить ложноположительные срабатывания сложно
                Мне кажется, это особенность Яндекса относиться с недоверием ко всем кто использует IPv6 от HE, даже Google нормально его воспринимает. У самого тоже тоннель от HE и когда в приватном режиме что то пытаюсь найти через Яндекс — всегда вылазит капча.
                  +8
                  Если не секрет, что за роботы там такие, борьба с которыми требует применения таких радикальных средств? Это просто оружие массового поражения какое-то, вместе с роботами еще и кучу вполне себе людей отсекаете. Первая капча, которую я не смог решить. Буквально 2-3 недели назад пытался создать Яндекс-аккаунт. Сначала указал свой мобильный номер — превышен лимит звонков. Ладно, думаю, наверное, нужен российский номер. Достал мегафоновскую симку — та же история. Капча еще больше вопросов вызвала, даже гуглить пришлось как ее решать — нужен ли пробел между словами, учитывается ли регистр символов, нужно ли вводить спецсимволы и т.д. Попробовал все варианты, но в итоге так и не пробился — после ~70 попыток был вынужден признать, что я робот и пойти регистрироваться в Gmail.

                  Обычный европейский проводной провайдер, никаких VPN и средств анонимизации не использовал.
                    +2
                    А может ваша система не показывать капчу, если пользователь переходит в поиск по ссылке из вашей же Толоки?
                    +2
                    Та же самая ситуация в двух локациях с IPv6 от HE. Причем если изначально было только в режиме инкогнито — сейчас и при обычной работе встречается. Но стало лучше — сейчас капча только с чекбоксом отображается.

                    Ответ техподдержки Яндекса от 16.07.2020:
                    Евгений, насколько я вижу, ваш IP-адрес относится к сети Hurricane Electric. Увы, в этой сети очень много роботов, поэтому мы вынуждены накладывать дополнительные ограничения для пользователей с такими IP-адресами.

                    Рекомендую отказаться от использования Hurricane Electric на сервисах Яндекса. Однако если такой возможности нет, то:

                    1. Нужно включить куки и хранить постоянно, их отсутствие воспринимается как признак робота;
                    2. Не нужно использовать язык запросов при использовании поиска: yandex.ru/support/search/query-language/search-operators.html
                      +20
                      «2. Не нужно использовать язык запросов при использовании поиска: yandex.ru/support/search/query-language/search-operators.html»

                      я прямо даже и не знаю что такого нематерного сказать на это предложение…
                        –1
                        Согласен, формулировка не очень хорошая. Здесь по сути говорится, что роботы часто используют и полагаются на «язык запросов», поэтому этот фактор может быть достаточно значимым, при недостатке другой информации или при наличии других негативных сигналов. Но это точно не единственный фактор. И в обычной ситуации из-за использования «языка запросов» не должно быть капчи.
                          +19
                          Я хочу сказать что если фича не для юзеров — отключите её. Говорить пользователю «не используйте наши фичи» это просто издевательство.
                            –5
                            Фича как раз для людей. Это формулировка ответа неудачная, исправим.
                              +15
                              Да нет, формулировка в целом смысл доносит. Он примерно такой: либо вы похожи на тетю Клаву (которая ничего в компьютерах не смыслит — какой уж там язык запросов), либо вы нам не нужны как клиент поиска.
                              И вот этот смысл ужасает. Я бы его перевернул, утрировал и посыпал сарказмом во фразу:
                              Яндекс — не место для профессионалов.

                              Вот примерно об этом же рассказывает redneko в соседних комментариях.
                                +2

                                К сожалению, у Гугла подобная же логика. Стоит мне начать искать что-то специфическое, а гугл и так, и сяк не может дать ожидаемый ответ, то через 4-5 запросов я начинаю получать капчи. А я человек, честно-честно. Хотя...

                                  0

                                  Когда я пытался пользоваться "домашним интернетом" от одной "полосатой" компании, мне капчи сыпались не на 4-5-й запрос, а просто на заход на главную гуглопоиска… пришлось уйти к другому провайдеру, тем более, что и тарифы там чуть интереснее.

                        +5

                        Вот собственно о том и речь, что весь ответ техподдержки можно свести к классическому "нет человека — нет проблемы" и проще кинуть в бан всё адресное пространство ураганных электриков, чем немного изменить логику работы. Имхо, в мире розовых пони алгоритм мог бы быть чуть умнее — при подключении пользователя по IPv6 подсовывать скачивание пикселя с сервера, имеющего только v4 связность, запоминая связку обоих адресов (v4 и /64 или /48 адреса сети для v6), учитывая это как один из параметров антиспама и динамически вычислять скоринг, ориентируясь в том числе и на поведение остальных пользователей из этих сетей.

                        +7
                        Вот, кстати, да. Тоже залогинен, честный статичный IPv4 но ya.ru периодически рандомно выкидывает подобную капчу:
                        image
                        При этом я действительно могу искать разноплановую информацию: в одном окне датащит на детальку а в соседнем где купить сезаль. Я не бот, честно-честно!
                          0
                          Ах! Сегодня впервые вместо капчи вылезла вот такая галочка:
                          image
                          Это прогресс, товарищи!
                          +2

                          Ещё веселее дела обстоят в гугле. Это когда ты сначала проходишь капчу, но в итоге тебя все равно не пускают под предлогом того, что с вашего IP делается слишком много автоматических запросов.

                            +1

                            Было такое дело, давным-давно, когда сидел на местечковом говнопровайдере с DOCSIS, у которого за NAT сидела, наверное, половина города на одном IP. С тех пор у гугла таких финтов ушами не наблюдал ни разу, и к IPv6 у них вопросов нет.

                              +1
                              Ничего не изменилось. У 2х провайдеров и с работы за NAT периодически вылетает даже на первый запрос.
                              0

                              Встречал такое имея белый статический ipv4-адрес от проводного Билайна в Москве. Может быть, потому что последний октет моего адреса был 255?
                              Длилось это годами, при этом ничего странного в/из моей сети, скорее всего, не происходило (пара скучных линуксовых машин). Закончилось, когда адрес я случайно сменил.

                            +4
                            Спасибо за рассказа. Лично я периодически встречаю предложения яндекса ввести данные с картинки. Обычно в такой момент я просто закрываю вкладку, открываю заново и уже все работает без проблем.
                            Раньше пробовал вводить, но часто попадался такой кошмар что даже с 10й попытке ну удавалось ввести правильное значение.
                              +1
                              В прошлом с картинками и правда было страшно. С этой стороны уже должно стать в среднем сильно проще. Но продолжим и дальше работать, чтобы капча вообще не появлялась. У меня к вам такая же просьба: на странице с капчей можно нажать на «обратная связь». Так у нас будет больше примеров от реальных пользователей.
                              0
                              Если делать масс регер, то капчагадательные сервисы всегда хорошо справляются. В том числе и с рекапчей. Чем ваша капча в этом случае такая особенная?

                              На wordstat новую капчу еще не прикрутили? Хотелось потестировать.

                              И кстати, ML это громкое название для процесса сбора большой бд «нормальных» юзеров и сравнение отклонений от нормы или там есть чет такое эдакое?
                                0
                                Если говорить про роботов, то у нас для них индивидуальный подход, но сильно деталей не готов рассказать. Если говорить про отличия других решений, то мне кажется, что мы сейчас больше повернулись к людям.

                                С wordstat уже работаем и там скоро будет лучше.

                                По ML, там классическое машинное обучение и задача бинарной классификации + немного нашей специфики.
                                  +4
                                  Понимаю, но я и не интересуюсь, как вы детектите роботов(+- как и все, тот или иной фингерпринтинг), я предполагаю, что ваша капча не будет препятствием для сервисов, которые решают капчи за копейки. Когда выкатите на вордстат, то кто-то может проверит.

                                  Вы, кстати, как относитесь к тому, чтобы кто-то с хабра разобрал вашу систему фингерпринта и пуленепробиваемость вашей капчи? В суд подавать будете? ))
                                +8
                                Яндекс окончательно проиграл борьбу с накруткой ПФ? Или он до сих пор «не признает, что она есть» и великий и могучий ML не учитывает накрутки?image
                                Вам кто больше нравится: Олененок, Конь, Белка, Бобер или Сурикат?
                                P.S чтобы понять о чем я не поленитесь откройте выделенные сайты.
                                  +8
                                  не поленитесь откройте выделенные сайты.

                                  Хорошая попытка, но… )
                                    +2
                                    Согласен, со стороны выглядит как попытка накрутить … Но это троллинг показывающий до чего доводит игнорирование проблемы. Там веселые животные в ироничной форме это показываю, к создаю этих сайтов отношения не имею.
                                      +3
                                      И вы не согласны с тем, что это лучшее, что можно выдать на запрос по сео курсам (без слова бесплатно)? Наглядно, весело, с пруфами, что ещё надо? Гугл и утка выдают там всякие лендинги в стиле «мы сами не умеем, но вас научим», и университеты Бауманские (эффективность наверное даже ниже, чем у тех, кто сами не умеют)…
                                        0
                                        Лучшее / не лучшее тут дело субъективное. Я о другом, есть проблема накрутки searchengines.guru/ru/forum/1029854/page499 Проблема затрагивает довольной процент сайтов, тематик, гео. При обращении в поддержку Яндекс все отрицается. Ответ в духе все накрутки фильтруются и не учитываются. При этом если показать «вот смотрите», то руками буквально за 30-40 минут все отфильтруют и почистят.
                                          +3
                                          Ну реально: искали накрутку поиска, получили наглядную демонстрацию накрутки поиска. Что не так?
                                    +2
                                    Олененок, Конь, Белка, Бобер или Сурикат

                                    И ни одной хрюши! Это ужасно :(

                                      0
                                      Это явно не ПФ, ПФ как раз на таких сайтах слетит через какое-то время.
                                        0
                                        Ну да, Олень, Конь уже пропали. И Суррикат.
                                      +5
                                      Ну, как по мне, то «я не робот» — это немного оскорбительно звучит. Как если бы вам при подаче заявок надо было расписываться, что вы не верблюд. Вводить «захватывающие» лозунги, наверное, было бы лучше.

                                      Ну, или может, заменить «я не робот» на «сам ты робот» — и уже совсем другой отклик.
                                        +1
                                        Мы в первую очередь думали про максимально емкие формулировки для людей, которые впервые попадают на капчу. Главное, чтобы они не испугались и поняли, что произошло. Но тут есть, куда еще двигаться. «Сам ты робот» в копилку идей кинули )
                                          +1
                                          «Ок, продолжить поиск»
                                          «Давайте дальше»
                                          «Все ясно»
                                          «Штош»
                                            0

                                            "Штош, ты не бот"?
                                            image

                                        +7

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

                                          0
                                          В новой версии (которая с галочкой на первом этапе) такое больше не должно случаться. Мы её уже раскатили на наши наиболее нагруженные сервисы, на ряд других докатим со временем.
                                            +1
                                            А как вам идея принимать типичные опечатки за верное введение капчи.
                                            То есть проанализировать как ошибаются обычно боты, как люди. И неверный ответ типичный для человека считать за верный.
                                              0
                                              Интересная идея, мы на это смотрели и это пока дает очень мало. Но к глобальной идее «текст по символам не совпадает, но все-равно пропустим» мы еще вернемся и опечатки могут быть одним из факторов.
                                          0
                                          На правах рекламы. Для сервиса по работе разработал свою капчу с решением простых арифметических примеров: github.com/tormozz48/algebraic-captcha
                                            0
                                            Решение вашей капчи автоматизируется продвинутым школьником. Как минимум:
                                            — символы разного цвета и далеко друг от друга
                                            — легко определяющиеся грани (контрастный однородный фон)
                                            — текст на одном уровне, без поворотов, одним шрифтом
                                            — линии отдельным от цифр цветом
                                            — картинки в svg, скорее всего можно упростить задачу еще сильнее поправив некоторые элементы
                                            Хуже только передача решения через url к картинке (бывает и такое)
                                              +2
                                              Да автоматизируется легко. Я не буду спорить.

                                              Но любая капча на распознавании картинок это попытка выдержать баланс между:
                                              • По дефолту не дать роботам совершать действия
                                              • Не заставлять клиентов оставлять свое зрение и нервы при попытке распарсить картинку глазами.


                                              В свое время мы использовали как раз старую капчу от Яндекса и столкнулись с жалобами от клиентов, после чего я предложил и внедрил свое решение. Мое личное мнение такое: «Удобства для людей приоритетнее кейсов когда может пролезть какой-то специально обученный бот, которого можно отследить отдельными метриками».
                                                0

                                                Хуже — только отдавать зелёную надпись на жёлтом фоне. Ни я, ни мой коллега такую надпись банально не видим — приходится звать девочек из соседнего отдела, чтобы они прочитали.
                                                *не помню, на каком ресурсе натыкаемся на эту дичь, но заходим туда где-то раз в полгода.

                                                +2
                                                «is numeric answer for given equation (10 for this case).» — и пример с «8-3=?».
                                                Сильно :)
                                                  +1
                                                  А ведь действительно сильно :). Спасибо, поправлю в документации.
                                                0

                                                Петр Первый прорубил окно в…
                                                Сила действия равна силе…
                                                Жи и Ши пиши через…
                                                А и Б сидели на трубе, А упала, Б пропала, кто остался на трубе?
                                                Зимой и летом одним цветом — …
                                                Как вы думаете, собирать общеобразовательные фразы из школьной и детсадовской программы и предлагать пользователю — это хорошая идея?
                                                Сложность — научить валидатор принимать ответы в синонимах и разных языковых формах, возможно с опечатками.
                                                Недостаток — роботы могут быстро научиться (тяжело поддерживать и обновлять свежую базу вопросов).
                                                Автоподбиратель заданий через обучение на распространенных текстах в сети тоже плохая идея — разгадыватели капч будут искать ответы там же.

                                                  +1
                                                  Как вы думаете, собирать общеобразовательные фразы из школьной и детсадовской программы и предлагать пользователю — это хорошая идея?


                                                  разве вы сами не ответили на свой вопрос?
                                                    +1

                                                    Разве же можно ответить вопросом на вопрос?

                                                      +1
                                                      Недостаток — роботы могут быстро научиться


                                                      чем вам не ответ на процитированном выше вопрос?
                                                        +1

                                                        А почему вы спрашиваете?
                                                        :-)

                                                      +2
                                                      Просто ужасная. Во-первых база фраз будет очень небольшая (даже десяти миллионов не набрать), из-за чего роботы ее скопируют вмиг, а во-вторых не все люди учились в нашей русской школе или помнят, что там в ней было. В итоге получаем, что боты будут входить в 99% случаев, а люди возможно даже в меньшем.
                                                      +7

                                                      Акция в честь дня учителя заслуживает уважения.


                                                      А вот "всё получится" в монохромном стиле напоминает, скорее, картинки "всё тлен" :)

                                                        0

                                                        Выше уже упоминал, что цветные "картинки" не всем доступны для прочтения, так что монохром считаю не злом, а плюсом.

                                                          0

                                                          Так я и не говорю, что это зло. Вообще, капча хорошая. Просто описал свои ассоциации с "всё получится".

                                                        +4
                                                        Как же ваша система не любит квадратные экраны и режим инкогнито.
                                                          +2
                                                          Если на втором этапе мы по-прежнему считаем запрос подозрительным, но степень уверенности в этом не такая высокая, то показываем простейшую капчу. А вот если мы уверены, что перед нами робот, то можем сложность и приподнять. Простое, но эффективное решение.

                                                          Вот тут логику не понял. Типо если я напишу бота, который будет максимально примитивен, ему вы подаете капчу посложнее. Но если у меня достаточно навыков и знаний чтобы обойти вашу проверку, то вы мне сами еще и поможете завершить все, подсунув более легкую капчу? Интересненько ) Эдакая схема поощрений для качественных ботов.
                                                            0
                                                            Да, мы хотим сделать процесс прохождения Капчи / парсинга сервиса максимально дорогим. У нас нет иллюзий, что real time защиту невозможно обойти, но мы хотим сделать это как можно сложнее, дороже и не таким массовым. И не забываем про удобство людей, для которых мы и делаем наши сервисы.
                                                            +3
                                                            Когда пытаюсь подобрать интересный по цене/ТТХ товар, исследую и сравниваю 100500 разных товаров на Я.Маркете. Причём раньше меня за это Яндекс банил, без всяких капч, просто сервис переставал для меня работать. Приходилось обращаться в поддержку, чтобы разбанили. Поддержка отвечала, что живые люди не могут потреблять информацию в таких объёмах.
                                                            Так может я и вправду робот?
                                                              +4
                                                              Я всегда думал, что это не от «роботов» штука, а бесплатное обучение нейросетей, за счет пользователей. И сделано, под предлогом «заботы» о пользователях. Это конечно имхо :)
                                                                0
                                                                Обучение на что, как кликнуть в квадратик или вы про распознавание объектов на картинке? А для пассивного сбора инфы виджет условной рекапчи особо не нужен.
                                                                  0

                                                                  Распознавание объектов, на некоторых капчах можно двояко ответить и она "пропустит".

                                                                    +2
                                                                    на некоторых капчах можно двояко ответить и она «пропустит».

                                                                    На 74357181-й попытке — сервер согласился, что у него пароль «Мао Цзедун» (с)
                                                                  0

                                                                  А что тут думать? Это как бы ни для кого не секрет. Берётся 50% картинок/слов, которые сервису известны (и их нужно ввести правильно), и 50% тех, которые неизвестны, но хотелось бы узнать. Пользователь заранее не знает, какие из них известны сервису, и стремится ввести все правильно. А машинное обучение тем временем узнаёт, как выглядят пожарные гидранты. Кстати, вы давно видели пожарный гидрант в реальном мире?

                                                                    +1
                                                                    национальная специфика, в США они буквально на каждом шагу, норматив 300-500 футов
                                                                  0
                                                                  > Вы узнаете, как мы отказались от распознавания текста и перешли к его генерации… Если хочешь полностью контролировать качество капчи, то выход только один — генерировать картинки самостоятельно.

                                                                  Но ведь это было ясно с самого начала.

                                                                  Лет 15 назад я сам себе написал генерилку капчи для гостевой книги (можно понажимать F5), и пользуюсь ей до сих пор. И вот что я понял: никакого смысла сильно усложнять картинку нет. Если нужно, то спам засунут на ресурс просто люди, вручную за сущие копейки. И никакая капча этому противостоять не сможет. Решение должно быть только комплексное, с привлечением всяких stopforumspam.com и различной внутрисайтовой эвристики.
                                                                    0

                                                                    На одном своём сайте ваял я как-то раз ну не прямо капчу, но борьбу с ботами, которые любят отправлять формы на серверы.
                                                                    Поля формы были открыты не сразу все, а открывались последовательно по мере набора текстов в полях:


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


                                                                    И вот если из "браузера" ко мне на сервер приходит форма с заполненными полями, которые для набора не открывались, то я эту форму игнорирую, т.к. неоткрытые поля мог заполнить и отправить только бот. :-)

                                                                      0

                                                                      Многие боты работают через браузер (headless, selenium webdriver, etc) и могут легко справляться с заполнением сложных динамических форм эмулируя поведение реального пользователя (кликая на элементы страницы).

                                                                    0

                                                                    И никто не вспомнил про гугл?


                                                                    А вообще я думал что Гугл пока показывает галку, то от мышку трекает, то от ещё что, что должно быть сложнее подделать ботом.

                                                                      +1
                                                                      А как он отнесётся к тачскрину? Есть же моноблоки с тачем. А люди любят тыкать пальцем в экран. И тыкают сразу в нужный элемент, не двигая курсор, который телепортируется в место нажатия.

                                                                      Я помню, что Касперский фильтровал ввод так, что в некоторые поля нельзя было ввести с клавиатуры или тыкнуть мышью если ты на удалёнке. При этом, на экране нет никаких окон или баннеров и мышка двигается. Но не вводится, только с реальных локальных можно ввести. Поля, относящиеся к безопасности: логины, пароли и прочее. Но для этого у Касперского есть драйвера в системе, чего у браузера естественно нет. Так что браузер не сможет определить, если бот будет двигать курсором имитируя действия мышкой вместо посылания сообщения прямо элементу с фокусом.
                                                                      +3
                                                                      Я не знаю в чём дело, но гугл и другие сервисы не показывают мне капчу месяцами.
                                                                      Пару месяцев назад этим увлекался алиэкспресс, но видимо их тоже вынудили отказаться от данной практики.

                                                                      Возникает закономерный вопрос.
                                                                      Почему я вижу капчу только на яндексе? Или может быть гугл делает что то не так? )
                                                                      Закономерное решение — просто не пользоваться сервисами, где мне предлагают пройти капчу.
                                                                      В войне с роботами побеждают людей. Ага.
                                                                        +5
                                                                        Глубокоуважаемый Яндекс!

                                                                        У меня к вам есть один очень странный вопрос: Вы специально отсеиваете капчами пользователей (не роботов), у которых стоит англоязычная версия ОСи и, соответственно, нет русской раскладки клавиатуры? Я вот был очень удивлен пытаясь как-то зайти к вам с неместного компьютера и просьбу ввести для капчи русское слово «аккумулятор». Может давайте сразу будем просить вводить китайские иероглифы или какие-нибудь символы тувимского алфавита? Ну чтобы уже наверняка только избранные могли к вам попасть?

                                                                        Или же это все таки сознательный шаг и вы строите свой сервис с лозунгами «Русский посиковик — только для русскоязычных пользователей! Чемодан — вокзал — Google!»
                                                                          +2
                                                                          У нас есть специальная очередь картинок, где только латинские символы. Например, если пользоваться yandex.com, то картинок с кириллицей не должно быть. Если у вас интерфейс на английском, а картинки с кириллицей, то напишите, пожалуйста, в форму обратной связи. Посмотрим на это, такого не должно быть.

                                                                          пример

                                                                          +1
                                                                          Предлагать эту капчу для сторонних разработчиков не планируете?
                                                                            0

                                                                            Надо буквы по дуге (как у вас), но размер каждой буквы разный и базовая линия дуги для каждой буквы тоже смещенная toshchakov

                                                                              –1
                                                                              Где-то я уже это видел…
                                                                                +4
                                                                                Вряд ли я открою большой секрет, если расскажу, что капчу часто применяют для обучения компьютерного зрения. В целом ничего жуткого, да?

                                                                                Нет, это бесплатный труд на благо коммерческой компании.

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

                                                                                Да-да, мы помним, как reCaptcha еще долго нагло врала про душеполезную оцифровку книг, после покупкии ее Гуглем, когда там уже давно предлагалось распознавать образы для гуглокарт. Яндекс не такой, Яндекс за грамотность искренне переживает…
                                                                                  0

                                                                                  У вас смысл фразы изменился, потому что объединили фрагменты двух разных абзацев.


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

                                                                                    0
                                                                                    Вы правы, мой коммент можно прочесть таким образом, будто я ловлю Вас на противоречии, чего ни в комменте нет, ни в тексте я не заметил.
                                                                                    Ловлю, вернее упрекаю, я Вас в другом, а именно: в попытке подать сугубо коммерческую проблему как эдакое scherzo, повод чуть ли не умилиться: ах, %sayname%, ты думаешь о нас! Не надо так, это бесит еще больше, чем сама капча ;)
                                                                                    Кстати, а почему Вы не пошли по пути динамического формирования кода интерактивных элементов, который можно было бы использовать в качестве «невидимой» пользователю капчи?
                                                                                      +1
                                                                                      Кстати, а почему Вы не пошли по пути динамического формирования кода интерактивных элементов, который можно было бы использовать в качестве «невидимой» пользователю капчи?

                                                                                      Невидимая капча — это примерно то, что и происходит на новой странице с «Я не робот». В идеале, конечно, делать такую проверку незаметно на сервисе, но сделать это в лоб не получится, т.к. логика достаточно тяжелая и «притормозит» работу самого сервиса. Но найти тут компромисс и по максимуму перенести проверку в фон — это то, что мы хотим дальше делать.
                                                                                        +1
                                                                                        Вомзожно, мы о разном говорим. Я вот о чем: например, Вы хотите не дать ботам пользоваться поиском. Код формы для поиска включает input submit, по нему, собственно, боты и находят нужные им элементы управления. Легким движением руки делаем этот input невидимым и добавляем второй — видимый input с тем же функционалом, но другим id. Бот «видит» «стандартный» input и радостно «жмет» на него, пользователь — видит «нестандартный», но реально предназначенный для него input и жмет его. Сервер видит, с каким id был использован input и делает обоснованный вывод: в первом случае — тупой бот, во втором — живой человек. Код, конечно, может быть совсем иным, но идея, думаю, понятна: роботы и люди видят страницу поиска по-разному, на этом боты и ловятся.
                                                                                          0

                                                                                          Эта механика имеет смысл против ботов, работающих "по площадям". Если же бот пишется под конкретный сайт, то всё это добро обходится на раз, просто подсмотрев в консоли браузера отправляемые запросы.

                                                                                            0
                                                                                            Боты для того и пишутся, чтобы все автоматизировать, а не руками лазить в консоль. Один раз посмотрели, написали бота, при следующем заходе сгенерилась форма с новыми ID. Бот распознает ее как соответствующую шаблону и юзает, палясь как бот. Добро пожаловать снова в консоль, и так при каждом заходе. А, погодите, это уже перестает быть ботом со всеми вытекающими…
                                                                                              0
                                                                                              Один раз да, второй раз тоже. А на третий раз автор бота заморочится, расковыряет алоритм — или банально переделает бота на Selenium/Webdriver, чтобы там все скрипты выполнялись как в браузере, соответственно активными будут только «правильные» поля. И всё.
                                                                                              Да, этот подход усложняет написание бота, но не критично, на мой взгляд.
                                                                                                0
                                                                                                Это соревнование брони и снаряда, а не серебрянная пуля, но в коде их рекламы этот принцип вполне успешно используется.
                                                                                                  0
                                                                                                  банально переделает бота на Selenium/Webdriver,

                                                                                                  Только вот работа через Selenium/WebDriver вполне себе палится, и значит разработчику нужно будет написать аналоги этих библиотек, что на порядок усложняет процесс написания бота.
                                                                                    +3

                                                                                    Задумался я над кнопкой "Я не робот". Я-то надеялся, что там собираются какие-то поведенческие факторы, типа трек курсора мыши, или еще что-то… Может стоит попробовать для глубокой проверки просто показывать крутилку, которая сама исчезнет, а не требовать телодвижений пользователя и угнетать его сравнением с роботом?
                                                                                    Также, читая комментарии пользователей конкретного провайдера выше, я задумался, может вам стоит улучшить ваш классификатор ip2isp? Ну, дополнить его тем же машинным обучением, например…

                                                                                      +1
                                                                                      1. Сигналы используем, ML тоже. Конечное решение принимает как раз модель на базе Catboost в режиме бинарной классификации.

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

                                                                                      3. ip не является единственным сигналом для принятия решения, сейчас некоторые парсеры без проблем используют мобильные прокси.
                                                                                        +1
                                                                                        Как и alexxz думал, что собираются поведенческие факторы и был весьма разочарован.

                                                                                        Выше были предложения, чем заменить «Я не робот», моя версия, это кнопка типа: «Пусти меня [дальше]». «Дай пройти», «Не мешай» — получается диалог.
                                                                                        Когда я нажимаю «я не робот», потом вижу капчу — это как ответ: «не верю», чувствую конфликт. Когда я нажимаю «пусти меня дальше», а мне капча — я воспринимаю это как «давай, только капчу разгадай и в путь», — мне это нравится больше (я только о своем восприятии, я не все люди, за всех сказать не могу).
                                                                                      +5
                                                                                      Лично я для себя сделал следующие выводы: главная цель яндекса это полное устранение анонимности пользователя. Причём в самом мерзком, маркетинговом смысле — вам нужно знать о пользователе только максимальный набор данных. Любой урезанный набор не подходит, нужно заставить пользователя показать всё. Вам невыгодно, чтобы я нагружал ваши сервера, не отдавая взамен полного слепка истории.

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

                                                                                      Это причина, по которой я всё реже пользуюсь яндексом (с тех пор, как купил постоянный VPN — так практически и не пользуюсь).

                                                                                      Понятно, что вы не признаетесь в этом, я просто пишу, чтобы сказать — да, я это вижу, и все это видят.
                                                                                        –2
                                                                                        Вы правы в том, что спорить нет смысл. Просто оставлю здесь один факт, описанный в посте. Он куда лучше слов показывает направление нашей работы.

                                                                                        теперь в Safari в режиме Инкогнито встретиться даже с галочкой «Я не робот» вероятность примерно в десять раз ниже, чем раньше.
                                                                                          +1
                                                                                          Только в огнелисе я с ней встречаюсь 1-2 раза в день. Вводные данные: квадратный экран (W=H), выделенный IP, Android, Firefox в порнорежиме. Макет поведения — читаем новости, на 20-30 вылетает «Впните сюды галочку».
                                                                                            0
                                                                                            Репорты через «обратную связь» на страницей с капчей помогли бы команде разобраться в таких случаях.
                                                                                              +2
                                                                                              Отлично, если для репорта будет достаточно только адреса почты, то будут репорты.
                                                                                        –1
                                                                                        Прежде всего удивляет, что капчи на рисунке в статье сделаны стандартными шрифтами, потом их чуть исказили. У Вас дети есть? Или у знакомых? Нужен первоклассник. Попросите его написать «я не робот».

                                                                                        Второе: дайте случайную капчу в чекбоксе: «я не робот» или «я робот» или «я не верблюд» и т.д. — На это быстрее ответить.

                                                                                        Если сработает, то спросите меня личным сообщением — скажу, куда выслать вознаграждение :)
                                                                                        Успехов в нелегкой борьбе.
                                                                                          0
                                                                                          Браво!!!
                                                                                          Минус получил, а критику своих советов не услышал. Явный троллинг, который, к сожалению, цветет и пахнет на Хабре. Вот бы капчу на троллей сделать!
                                                                                          0
                                                                                          А как вы отличаете от роботов слепых и слабовидящих людей, которые работают на компьютере через программу-говорилку? Для них есть какой-то способ сделать так, чтобы капчи никогда не вылазили?
                                                                                            0
                                                                                            Мы не можем сделать белый список для какого-то среза и не показывать там капчу. Этим сразу начнут пользоваться роботы.
                                                                                            Но наша капча адаптирована для слабовидящих, и у нас есть специальный режим — аудиокапча, на который можно переключиться.
                                                                                            +1
                                                                                            Но мы зашли с другой стороны: решили сделать капчу более дружелюбной к людям, не ухудшив при этом защиту от ботов. Казалось бы, наивный подход. Но у нас получилось.

                                                                                            Да, да, но нет. Здорово себя хвалить и всё такое. Понимаю реклама. Но наиболее раздражающая и вызывающая проблемы «капча» с которой приходилось сталкиваться с позиции клиента это именно ваша. Отдельным пунктом стоит необходимость ввести кириллицу на устройстве в котором её нет.
                                                                                              0
                                                                                              А шаг с галочкой точно нужен? Неужели сам факт тыка по галочке сильно прибавит к достоверности прогноза?
                                                                                              Я не предлагаю пропускать сам шаг, просто убрать необходимость совершать лишние телодвижения.
                                                                                                0
                                                                                                Аналитические роботы Яндекса они такие, им подумать нужно, пока человек мышкой двигает.
                                                                                                Вас много, а я одна! (с)
                                                                                                  0
                                                                                                  Аналитические роботы Яндекса они такие, им подумать нужно, пока человек мышкой двигает.

                                                                                                  Нет там никакой аналитики.
                                                                                                  Отключил мышку. Прогрузился до капчи.
                                                                                                  Запустил document.getElementsByClassName('CheckboxCaptcha-Button')[0].click(); — капча сработала.
                                                                                                  Не удивлюсь, если подобное будет срабатывать например на что нть типа CefSharp, откуда потом можно брать куки для продолжения работы ботом.
                                                                                                    0
                                                                                                    Вы статью точно читали?
                                                                                                    Пока пользователь ставит галочку, мы проводим дополнительный анализ с использованием более сложной ML-модели. Если всё хорошо, то возвращаем на сервис. Если «подозрительность» сохраняется, то показываем текстовую капчу.
                                                                                                +1
                                                                                                Меня эти антибот конструкции дико раздражают. Вообще отказался от yandex как от поискового движка в том числе и по этой причине.
                                                                                                  0
                                                                                                  Меня яндекс довольно часто в боты записывает. Как правило это происходит если нажать возврат на предыдущую страницу и ввести новый поисковый запрос в строке браузера. Поэтому если мне надо искать в яндексе, то делаю это через DDG с ключом !ya
                                                                                                    0
                                                                                                    роботы создают нагрузку или даже занимаются откровенным вредительством

                                                                                                    Защита от роботов конечно же нужна, но на сколько она эффективна в плане борьбы с нагрузкой на сервис? — Если запрос отправлен/принят, то какая-то работа в любом случае будет выполнена. Капча не спасает от нагрузки на сервер, а лишь закрывает доступ к контенту для роботов, тем самым говоря программисту «не знание законов, не освобождает от ответственности» (закон об авторском праве), ну и конечно же ограждает от не/намеренного вредительства.

                                                                                                    Казалось бы — здоров! Однако, в этом есть и минус: Если все сайты будут использовать капчу, то тот же поисковый робот Яндек не сможет получать доступ к сайтам, а значит поиск в интернете станет невозможным и для других роботов, а в конечном счёте и для пользователей.
                                                                                                      +1
                                                                                                      капчу предлагают только тем пользователям, чьи запросы в результате быстрого анализа показались нам подозрительными

                                                                                                      Ага, щас.
                                                                                                      У нас выделенный статический IP. И у всего офиса после перезапуска я-браузера вылазит капча. Писал в поддержку яндекса. Ответили: ваша подсеть используется роботами. И что мне делать? В нашем городе небольшой выбор провайдеров. Мой мелкий провайдер скорее всего арендует канал у крупного прова. Мне проще поисковик сменить.
                                                                                                        0
                                                                                                        Самое интересное, когда аплинк офиса с десятком машин внезапно перезагрузился. Например, шлюз/модем/роутер перегрузился, все машины дропнули коннект. А когда аплинк поднялся — все разом ломанулись в интернет. Я помню 15 лет назад это стабильно определяло половину юзеров ICQ во временный бан с формулировкой «слишком частые коннекты с одного IP». Вероятно, поисковик может работать тем же методом.
                                                                                                        0
                                                                                                        Так вот кто их их делает! )

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

                                                                                                        Самое читаемое