CAPTCHA: убивая конверсию

    image

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

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

    Маркетинговые


    Бесит!

    Капчу необходимо внимательно разглядывать и периодически вводить несколько раз. Исследование Стэнфорда говорит о том, что их испытуемые в среднем тратили 9.8 секунд, чтобы распознать и ввести визуальную капчу и 28.4 секунды на аудио-версию, причем 50% пользователей отказались ее решать. В 2018 году Baymard Institute, который проводит различные исследования на тему UX, подсчитал, что пользователи не могут решать текстовые CAPTCHA примерно в 8% случаев. Эта цифра увеличивается до 29%, если CAPTCHA чувствительна к регистру.

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

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

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

    Плохо влияет на конверсию

    Как известно, вообще любое лишнее поле для заполнения на сайте ухудшает конверсию. Вот интересное исследование, которое показало, что отказ от капчи приводит к росту конверсии на 3,2%. Точные данные по изменению конверсии в зависимости от капчи каждый ресурс может протестировать самостоятельно, ведь результаты зависят от специфики и аудитории. Но если подходить к проблеме с точки зрения упущенной выгоды, то необходимо посчитать затраты и эффективность в обоих случаях — намного ли выгоднее включать капчу, чем избавляться от спама другими средствами? Тем более, что они есть.

    Капчи стали сложнее

    image

    За эти годы CAPTCHA стал умнее, но и боты стали развиваться стремительнее и становиться более изощренными. В начале 2000-х простых изображений с текстом было достаточно, чтобы остановить большинство спам-ботов, но с каждым годом тексты приходится всё сильнее искажать, чтобы обгонять программы по распознаванию символов. Вы сами можете заметить, что в капчах, где нужно выбрать несколько нужных изображений, после нескольких неудачных попыток объекты для поиска прячутся или искажаются, добавляются новые классы объектов и увеличивается количество страниц, которые нужно пройти. Соответственно, при усложнении увеличивается и количество отказов у реальных пользователей. Конечно, Google решает свои дополнительные задачи, используя эти алгоритмы для обучения своих роботов распознаванию объектов на изображениях и вряд ли от них откажется, но пока что все выглядит так, как будто все, что делает капча, это отсеивает не очень умных ботов и невнимательных людей.

    Еще в далеком 2014-м Google стравила между собой свой лучший алгоритм по разгадыванию самых искажённых текстов и людей: компьютер правильно распознал текст в 99,8% случаев, а люди всего в 33%.

    Технические


    Капчу легко обойти

    Капча не выполняет свою основную функцию — не избавляет владельцев ресурсов от ботов. Вариантов “борьбы” спамеров с капчей даже больше, чем один.

    Системы распознавания и нейросети

    Системы OCR (оптическое распознавание символов) сейчас работают довольно точно и легко распознают как печатный текст, так и изображения. Решение добавлять “шумовой” фон, лишний цвет и линии, искривлять или сдваивать текст не особенно помогает это предотвратить, зато усложняет прохождение для реального человека.

    С развитием технологий машинного обучения и нейронных сетей глубокого обучения дальнейший процесс визуального усложнения капч выглядит бесперспективным. Полносверточная нейронная сеть, в которой на входе подается изображение, а на выходе выдается нужное изображение или несколько изображений (карты центров) распознает текстовые капчи в большинстве случаев. Однако для нее же решаема и капча с выбором нужных картинок ибо обнаружение и классификация объектов — ведь это именно то, чем и занимается нейросеть (в том числе та самая нейросеть reCAPCHA от Google). Да и некоторые библиотеки, позволяющие работать с нейронными сетями, тоже разработаны в Google (например, Tensorflow).

    Существуют сервисы взлома, при которых берется и транскрибируется аудио-версия капчи. При успешном развитии систем распознавания голоса это тоже перестает быть проблемой для опытных спамеров. Есть алгоритмы и скрипты, такие, например, как алгоритм Кока-Янгера-Касами для распознавания двухмерной грамматики, который может распознать более 50% капч. Есть и другие способы обхода проверки:

    • Генераторы чисел и другие системы перебора. Например, если есть один и тот же набор из 10 картинок, которые просто переставляются случайным образом, и нужно на них найти что-то определенное, то есть всего лишь 1024 возможных вариаций
    • Восстановление символов по данным логов
    • “Подглядывание” в скрипты для вызова капч, к примеру, <img scr=”/captcha.php?code = 1234”/>
    • Повторное применение идентификаторов сессий пользователей
    • Наконец, спамеры подключают последние версии распознавалок типа FineReader к своим самообучаемым спам-ботам.

    Бизнес по разгадыванию

    Существует целый рынок услуг, предлагающих обойти капчу, и это очень дешево. В этой индустрии заняты тысячи реальных людей — жителей Индии или Китая, которые за небольшую плату проходят тесты. Специальные биржи типа Amazon Mechanical Turk предлагают купить десятки разгаданных капч за несколько центов, а многочисленные сервисы еще и постоянно сбивают эту цену. Они же постоянно тысячами создают новые “чистые” аккаунты, которые проходят проверку спам-систем на сайтах легче и быстрее всего.

    Наконец, существуют онлайн-ресурсы с “интересным” содержанием типа игр или контентом для взрослых. Прежде чем пользователи смогут увидеть следующую порцию контента, система сделает бэкэнд запрос к Yahoo или Google, захватит оттуда капчу и подсунет её пользователю. И как только пользователь ответит на вопрос, хакер отправит разгаданную капчу на целевой сайт. Популярный сайт с востребованным контентом сделать несложно, если парсить (или попросту красть) интересный контент с целого ряда “легальных” порталов (мы в своей работе часто сталкиваемся с такими “копипастерами”). А хакер в итоге получает большую аудиторию, которая разгадывает чужие капчи, не подозревая об этом.

    Не различает плохих и хороших ботов

    Помимо плохих ботов, существуют и хорошие — это роботы поисковых систем и браузеров, полезные корпоративные боты разных сервисов, которые ищут или размещают информацию или предлагают пользователю помощь, автоматизируя работу техсаппорта компании или продажи ее услуг. Например, по данным GlobalDots, на текущий момент человеческий трафик составляет 62.1%, плохие боты 20.4%, а хорошие 17.5% (то есть отставание от плохих не такое уж и критичное). К сожалению, метод капчи не различает плохих и хороших ботов, не пропуская равно всех, хотя “хорошие” боты могли бы быть полезны.

    Ресурс для атак

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

    Генерация некоторых видов капч — это достаточно ресурсоемкая операция и идет она не быстро, так как требует запросов к сторонним библиотекам и в целом работает с изображениями. В случае, если кэширование по дефолту не предусмотрено или по каким-то причинам выключено, это еще больше мороки. Если атакующий ставит задачу создать избыточное количество запросов на генерацию капчи, то сервер может не успевать это делать.

    Впрочем, эта проблема решаема:

    1. Нужно выбрать определенный тип капчи, который этой проблемы лишен
    2. Расположить капчу на отдельном ресурсе

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

    Замедляет работу сайта

    image

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

    Как капча может влиять на скорость?

    • Генерация сложного изображения достаточно ресурсоемкая операция с учетом того, что не все показанные коды используются. Поэтому сервисы капчи и сопутствующие им логи и куки могут замедлять работу онлайн-ресурса.
    • Проверка кода и ключа осуществляется бэкендом, где могут возникнуть сложности с передачей больших файлов. Одноразовые ссылки также требуют проверки на уровне бэкенда, создавая лишнюю нагрузку. Капча может зацикливаться и замусоривать backend и тогда требуется создать механизм кеширования неиспользованных изображений для возможности их показа для других пользователей.
    • Кроме того, у многих капч-сервисов неудобный API как самого виджета капчи, так и сервера, и с этим разработчику тоже придется помучиться.

    Это все?

    Увы, нет. Есть еще несколько моментов.

    Во-первых, капчи могут ломать логику работы сайта — особенно в случаях, когда заполнение формы заканчивается капчей, причем не всегда пользователь об этом предупрежден. Однако и вариант “показывать капчу только на входе” не решает задачу защиты от спамеров, ведь получается, что после одноразового прохождения они могут делать дальше все, что захотят.

    Во-вторых, давайте подумаем о поисковых системах. Если поисковые системы “обеляются” по user-agent, то капча неэффективна. Если капча показывается всем — то может показаться и поисковикам, и сайт будет иметь проблемы с индексацией.

    Не капчей единой

    Существует множество других форм защиты, порой даже более эффективной для борьбы с ботами. Например, на фронтенде это могут быть минимальное время заполнения формы, меньше которого может заполнить только бот, или скрытое поле (display:none), которое не увидит человек, но заполнит бот.

    На сетевом уровне это могут быть обфускация или шифрование HTML, блокирование определённых user-agent и различные ловушки со стороны веб-сервера: например, создание невидимых разделов сайта, куда попадают только роботы и позже банятся по IP, или фильтрация анонимных прокси.

    И, наконец, есть метод, который мы применяем в Variti — это полная фильтрация трафика, который мы считаем единственным полноценным подходом в защите от ботов и DDoS-атак. Мы пропускаем через свои кластеры весь трафик, который идет на сайт или приложение клиентов, а специально настроенные и самообучающиеся алгоритмы определяют и пропускают дальше легитимный трафик от живых пользователей и “хороших” ботов, причем блокировки IP в этом процессе также не требуется. Впрочем, о том, почему мы считаем еще и метод блокировки IP вредоносным, мы поговорим в следующих статьях.
    Variti
    Компания

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

      +9
      > на фронтенде это могут быть минимальное время заполнения
      > формы, меньше которого может заполнить только бот

      Так это из-за вас у меня автоподстановка данных в форму на некоторых сайтах ломается?
        0
        В том же абзаце ниже написано какую стратегию применяем мы (полная фильтрация трафика). Она никак не влияет на автозаполнение форм. Так что ответ такой — нет, это не из-за нас!
        +5
        Реклама неплоха так-то. Вашу защиту не видел. На счёт «хороших» ботов за них как правило хорошо платят, так что они обычно делаются точно под сайт с дублированием всех необходимых запросов(html может вообще не трогаться), так что капча как правило с ними и не борется, только немного увеличивает время разработки. По факту капча это излишество, но спасает от тучи посредственных ботов, что бы они не пытались уронить сервис. Блокировка ip как правило не сильно спасает особенно через сторонние сервисы.
          +2
          Капча была бы лучше, работай она на человека, а не против. Капчу яндекса я вообще иногда не могу пройти. Капча гугла часто затягивается на секунд 30, стоит только выйти из аккаунта, особенно если заходить с прокси.
            +4

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

              +1
              «Мы в Variti проанализировали эффективность этого решения и пришли к заключению, что это очень неудобное и малоэффективное средство защиты от ботов, плохо влияющее на конверсию, а области с капчей — это сами по себе уязвимые места для атак.»
              Вы можете придти к чему угодна, но факт, на моих сайтах капча существенно снижает спам, и пока лучшего решения я не видел.
                0
                Honeypot?
                0
                Так может мух от котлет отделить? Какую проблему-то решаем?

                Капча не выполняет свою основную функцию — не избавляет владельцев ресурсов от ботов. Вариантов “борьбы” спамеров с капчей даже больше, чем один.

                «Авто-сигнализации не выполняют свою основную функцию — не избавляют владельцев авто от угонщиков...»
                Ну так потому что «избавить» никогда не было «основной функцией» :) Функция — сделать сайт\авто чуть менее привлекательным для ботов\угонщиков, чем соседний экземпляр. Если рядом стоит две машины и в одной двери открыты, а в другой стоит сигналка, угадайте, какую выберет угонщик.

                Если решаем проблему массовых фейк-регистраций (хотя казалось бы, какой в принципе от этого профит ботоводам?), то, кажется, капча при регистрации + емейл-подтверждение + может даже самый наколеночный фильтр по айпи (ну там больше N попыток регистрации с этого айпи за последние несколько минут — сходите попить кофе) отсекают подавляющее большинство ботоводов. А кому именно ваш сайт нужен, от того не спасет.

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

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


                  Проблемы капчи — это false negative, с которым можно как-то бороться дальше. А фильтрация трафика даст еще и false positive, который — прямые потери, которые уже не вернешь.


                  А в целом все так, анализ поведения — хороший способ отстрела ботов, тут кпача не поможет… или, ох, стоп, reCAPTCHA v3. Было бы интересно сравнить.

                    +3
                    False positive — это когда пользователь, увидев капчу, закрывает сайт.
                    Лично я так делаю в большинстве случаев.
                      0

                      Формально это не false positive, и самое главное — хорошо поддается аналитике. В том числе — является ли то, что вы закрыли сайт — потерей конверсии, или все все-равно просто мимо пробегали.
                      False positive в капче — это скорее неверно введеный текст из-за сложной картинки, но плюс капчи в том — что она при этом дает дальнейшие попытки, т.е. возможность исправить эту ошибку.

                        +1
                        И как же вы достоверно узнаете, что тот кто закрыл ваш сайт на капче — не потенциальный клиент, который просто открыл следующую за вами ссылку в гугле?
                          0
                          статистически, тестированием
                    0
                    Про минимальное время заполнения формы, display: none, блокировка user-agent и пр. — это просто смешно.
                    Свои решения капчи сейчас использовать нецелесообразно, конечно. Будет убого, не читабельно для пользователя и легко взломается, плюс куча времени уйдёт на поддержку.
                    Вот рекапчу взломать достаточно сложно и не нужно её поддерживать.

                    По поводу фильтрации трафика. Вы считаете, что бот не способен повторить все те же самые действия, что и человек, послать правильные заголовки, выполнить какой-то js и прочее? Всё это просто вопрос цены и целесообразности этим всем заморачиваться.
                      +1
                      Про минимальное время заполнения формы, display: none, блокировка user-agent и пр. — это просто смешно.
                      Напрасно смеётесь. От решающих гуглокапчу спам-ботов мне удалось отбиться именно таким детским способом — сделать дополнительное скрытое поле, которое они видят и заполняют. Главное в этом случае не писать 'display:none' прямо в форму, а использовать отдельный файл css: роботы как правило не грузят с сайта ничего лишнего. А ещё не нужно сообщать боту об ошибке — наоборот, нужно уверить его, что у него всё получилось.

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

                      Так что «минимальное время заполнения формы, display: none» — исключительно эффективные методы, кто бы что ни говорил. Проверено практикой.
                        +1
                        Такие методы могут работать только для ботов, которые не целятся конкретно в ваш сайт. Они пойдут по пути наименьшего сопротивления и проспамят те сайты, которые получилось.
                        Я говорил больше про тех спамеров, которые нацелены на конкретный сайт.
                      +4

                      У wargaming есть прекрасное решение. Они получают с сервера секретное сообщение и шифруют(на клиенте) его каким-то хешем(md5 мб, я не помню) до тех пор пока в начале хеша не будет n количество нулей подряд, а потом на сервер отправляют номер попытки для проверки.
                      Поиск занимает 1-2 секунды и грузит цп на 100%, но это же делает слишком дорогим брутфорс. Условно что бы вы не делали, но максимальная скорость это 1 попытка в секунду(на одном ядре).

                        0
                        Интересно. Но если цель бота просто оставить спам, то ведь ему хватит одной попытки.
                          0
                          В том то весь прикол, оставленное сообщение на конверсию не влияет.
                          Такой способ нужен для регистрации, для авторизации, для восстановления пароля(я имею ввиду варгейминг сейчас). Можно очень просто повысить сложность задания добавив в поиск еще один нолик и на расчет нужно уже 5 секунд(пользователь этого особо не заметит). Как итог у спамера жуткое падение производительности, а ему нужна скорость и объем. С капчей ты просто увеличиваешь количество потоков/прокси, а вот так же дешево считать хэши не выйдет.
                            +1
                            Я к тому, что для wargaming это — отличное решение. А для обычного сайта, который, например, спамят через контактную форму это не поможет. (Помогло бы, если бы это решение стояло у всех. А если будет только у вас у меня и у Wargaming, то спамера это задержит на 3 секунды)
                            0
                            Но зато спасает в том случае, если бот обходит сразу множество сайтов параллельно и оставляет там спам. Допустим, если за секунду он обходит 100 сайтов, а подбор этой капчи занимает 2 секунды, то проще за это время обспамить 200 незащищённых сайтов, чем 1 защищённый.
                            0
                            У пользователей очень разные CPU, то что считается за 1-2сек на десктопной машине, может выполняться пару минут на старом мобильном устройстве. Таким методом можно не просто убить конверсию, а сходу отрезать целый пласт гарантированно валидных клиентов
                              0
                              Интересная, кстати, идея для побочного майнинга…
                                0
                                Так себе идея против спам-ботов. По собственному опыту могу сказать, что существует куча ботов, которые ради отправки спама способны решить рекапчу гугля. Тратят они на это, судя по логам, несколько минут. И ничего — решают и отправляют. Их это вовсе не останавливает. Потому как ничто не мешает сделать бота многопоточным: подвисание одного потока из многих его не напрягает.
                                  0
                                  Это называется Proof of Work. Собственно похожий алгоритм использует и CloudFlare.
                                  0
                                  Я, наверное, робот. У меня капча часто не срабатывает, заполняешь по два-три раза. Ну или фотки тыкаешь, тыкаешь, а оне не те. :)
                                  Но счас горящий лис сам как то всё это пропускает мимо, стало гораздо лучше. Или это гугл подобрел?
                                    +1

                                    Подозреваю, на репапчу ослабили/зарезали resistFingerprinting. По крайней мере баг что рекапчу с защитой от трекеров пройти нельзя, а на багзилле видел. А может действительно им кто-то антимонопольщиками пригрозил.
                                    А так вы просто неправильно интернетом пользуетесь. Браузер у вас неправильный, кук гугловых маловато, в гугл аккаунт еще наверное не вошли.

                                    –1
                                    Вот есть два сайта — мой и моего друга Васи. Для него боты вредны, а для меня хороши и полезны, потому что у меня API и всё такое и я открыт для странных сканеров. В каком случае бот плохой, а в каком хороший?

                                    Капчу можно и нужно показывать, когда есть 99.9% уверенность, в том, что агент пользователя — нежелательный для конкретного сервиса. В этом случае вы повысите конверсию для неизбежных false-positive.

                                    Статья пробивает дно безапелляционными заявлениями и непониманием комплексности задачи защиты от атак, учитесь защищать у ddos-guard.
                                      0
                                      Зато капча — один из способов хоть как-то усложнить жизнь «биороботам», которым достаточно легонько наступить на любимую мозоль, чтобы они начали усиленно гадить на вашем сайте. Без капчи им это делать будет легко и удобно.
                                        0
                                        А как роботы рекаптчу научились ломать?
                                          +1
                                          Подчинили людей и заставляют её решать. ;)

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

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