Что такое рекапча recaptcha
Как работает reCAPTCHA?
В обсуждении моего недавнего перевода замечательнейшей статьи про CAPTCHA несколько раз появлялись вопросы насчет reCAPTCHA, а именно как же эта система работает. Под катом я в общих чертах объясню суть reCAPTCHA, наглядно покажу как она работает и каким же образом она цифрует книжки.
Расскажу я все достаточно кратко, но зато понятно. Приведенные иллюстрации были взяты с официального сайта reCAPTCHA
Stop spam
По своей сущности, reCAPTCHA выполняет ту же функцию, которую выполняют другие капчи. Суть проста, вводим предложенный текст и тем самым доказываем, что мы не робот. Главным отличием от других систем является то, что reCAPTCHA не только защищает сайт от спамеров, но еще и выполняет другую, достаточно интересную функцию.
Read books
Как вы наверняка заметили, reCAPTCHA предлагает ввести два слова, что практически не встречается у других капч. Суть в том, что пользователь при вводе этих слов не только доказывает, что он человек, но еще и помогает распознавать старые книги и газеты.
Принцип работы прост:
Допустим, есть энная книга, которая сохранилась в малом количестве экземпляров, при этом все они в плохом состоянии. Один экземпляр в отсканированном виде попал в руки Google (владелец reCAPTCHA). Что с ним делать? Правильно, цифровать (и дело тут не только в сохранении наследия, но об этом позже). Как цифровать? Цифровать, используя системы распознавания символов (OCR). Но, как многим известно, эти системы очень часто грешат многочисленными ошибками в выданном результате. Вручную перебирать весь текст на предмет ошибок — слишком дорогое удовольствие. И вот, на помощь приходит reCAPTCHA. Одно слово в изображении распозналось системой OCR правильно, а вот второе никак нет. Второе слово — за пользователем, именно то, что он введет будет использовано в качестве замены ошибочному варианту, предложенным OCR. Наверняка сейчас некоторые усмехнутся, да, я знаю про то, что фактически вместо второго слова можно ввести что угодно. Но каждое непонятное для OCR слово reCAPTCHA показывает пользователям сотни, а то и тысячи раз (при цифре в 200 миллионов генераций в день это очень мало), и в конечном итоге правильным считается тот вариант, который пользователи вводили чаще всего.
От скучного текста перейдем к иллюстрациям:
Вот так выглядит отсканированный текст. Качество, можно сказать, на высоте, но давайте же взглянем на результат работы OCR:
Красным выделены ошибки. Не правда ли их слишком много? А теперь посмотрим, что же будет результатом работы reCAPTCHA:
Не надо быть семи пядей во лбу, что бы увидеть разницу между OCR и дуэтом OCR + reCAPTCHA. Оцифровка получилась 100% безошибочной.
Разумеется, это что-то вроде идеальной ситуации, где все складывается так, как задумывалось создателями reCAPTCHA. Но наверняка многие из вас сталкивались с абсолютно нечитаемыми словами, предлагаемыми для ввода. Проблема в том, что некоторые книги \ газеты сохранились настолько плохо, что порой и вручную они распознаются отвратительно. Вот пример:
Изображение отвратительного качества. Посмотрим, что тут сможет сделать OCR…
… а ничего. Ошибки не подсвечены потому, что все это — одна большая ошибка.
Зато силами reCAPTCHA результат становится вполне себе читаемым, хоть и не безошибочным.
Именно таким образом пользователи помогают оцифровывать книжки средствами reCAPTCHA. По-моему, это прекрасно.
Я ничего не понял!
Скрипты для распознавания
Бытует ошибочное мнение, что reCAPTCHA невозможно взломать (речь идет об автоматическом распознавании приведенного текста, без участия человека). Однако, судя по тенденциям, это не так. С течением времени reCAPTCHA понаделала различных подводных камней для систем распознавания. Среди них искривление текста, пересечение его полосами, так же недавно была введена фича, благодаря которой проверочное (известное системе) слово выглядит сдвоенным. Все это указывает на то, что reCAPTCHA все таки испытывает некоторые трудности с защитой.
Никто и не подозревал
Есть люди, которые критикуют reCAPTCHA, и с этической точки зрения, критикуют они не зря. Дело в том, что за распознанный текст Google так или иначе получает деньги. А сами тексты добываются вполне себе бесплатно, силами пользователей. То есть, тут имеет место бесплатный труд. Лично меня это не волнует, к тому же, никто не заставляет пользователей вводить reCAPTCHA, и более того, никто не заставляет веб-мастеров устанавливать ее на свои сайты 🙂
Что такое капча и как установить ее на сайт?
Бродя по интернету, каждый периодически сталкивается с необходимостью ввести плохо различимые символы с картинки или выполнить несложное задание, чтобы продолжить регистрацию, отправить комментарий или совершить переход на сайт. Такого вида тесты носят название CAPTCHA.
Давайте разберемся, зачем нужна капча, чем она может быть полезна и как установить ее на ваш сайт.
Что такое CAPTCHA и для чего она нужна
CAPTCHA – сложная аббревиатура, представляющая собой практически целое предложение: Completely Automated Public Turing Test To Tell Computers and Humans Apart (в народе – просто капча). Выражаясь простыми словами, это тест для отсеивания роботов от людей.
Видов капчи очень много: искаженный текст, математические действия, пазлы, вопросы, выбор правильной картинки и так далее. Все это в большинстве случаев не представляет сложности для людей, но для роботов до недавнего времени было практически непреодолимой задачей.
Капча во всем ее многообразии
Чтобы разобраться в предназначении капчи, нужно понять, зачем плохие роботы ходят по сайтам. На самом деле цели у тех, кто их туда отправляет, могут быть разными:
DDOS-атака. Метод, с помощью которого можно легко сломать сайт. Для этого на него посылают кучу запросов из разных источников, которые сервер не способен обработать. В итоге ресурс зависает и становится недоступным для пользователей.
Брутфорсинг. Это попытка взлома сайта с помощью подбора логина и пароля. Специальные программы могут делать это бесконечно – до победного конца. Особенно часто под такие атаки попадают сайты, которые управляются с помощью CMS с открытым исходным кодом вроде WordPress или Joomla!: адрес страницы входа в админ-панель по дефолту у них стандартный, поэтому мошенникам он хорошо известен.
Спам. После того как вы запустили сайт, через время в комментариях обязательно появляются кучи ссылок от спамеров. Если не контролировать их действия, площадка может превратиться в линкопомойку и попасть под фильтры поисковых систем.
Перехват товаров. Многие интернет-магазины устраивают акции, на которых в течение ограниченного времени можно купить какой-нибудь товар. Это может быть, к примеру, лимитированная коллекция или новинка от производителя инновационной техники по сниженной цене. В таких ситуациях в игру вступают боты, способные за несколько секунд совершить массу операций, в том числе скупить всю партию товара и не оставить другим ни единого шанса.
Получение данных. Сбор информации с сайтов называется парсингом. Им в основном занимаются крупные интернет-магазины, агрегаторы и SEO-специалисты, которые изучают конкурентную среду в поиске или хотят автоматически заполнить страницы продвигаемых площадок чужим контентом. Вреда ресурсу парсинг обычно не наносит, но может нагружать аккаунт хостинга, на котором расположен сайт. Защититься от такого практически невозможно, тем более с помощью капчи.
Какой она бывает?
Капча появилась 20 лет назад и изначально показывала высокую эффективность в борьбе с роботами. С развитием искусственного интеллекта метод начал устаревать: теперь одной лишь капчей не спастись даже от спама, не говоря уже о более серьезных проблемах. На данный момент существуют различные технологии и браузерные расширения, позволяющие ее обходить. Если же задания слишком сложны для робота, их выполнение можно поручить реальным людям через специализированные сервисы. Если в наше время очень нужно что-то получить, CAPTCHA – не преграда.
Но важно отметить, что разработчики капчи тоже не сидят сложа руки и совершенствуют технологию. Многие компании создают капчи собственными силами: к примеру, можно нанять специалистов на бирже для программистов. Но большинство пользуется готовыми решениями. Наиболее часто используемый вариант – reCAPTCHA от Google.
В 2014 году поисковик выпустил усовершенствованную версию – reCAPTCHA v2. Ее до сих пор активно используют владельцы сайтов. Если пользователь не вызывает подозрения у программы, ему нужно всего лишь поставить галочку для подтверждения своей человечности. В противном случае появляется квест, который может доставить немало хлопот реальному пользователю, если программа ошибется (а это происходит часто).
Светофоры, пешеходные переходы, знаки, автомобили. у вас такое было?
Так как эта версия капчи от Google все же оказалась не такой удобной для пользователей, поисковик предложил усовершенствованный вариант – reCAPTCHA v3. Она невидима для пользователей и не заставляет их решать задачки. Вместо этого она постоянно отслеживает их действия, дает им оценку, чтобы затем вынести вердикт, робот перед ней или человек.
Капчу все еще используют многие сайты. Несмотря на то, что ее эффективность сомнительна, этот метод борьбы с фейковым трафиком остается простым и бесплатным.
Теперь пройдемся по недостаткам капчи:
Неудобство для пользователя. Такие, казалось бы, простые задачки заставляют людей тратить дополнительное время и нервы. Если это интернет-магазин, наименее терпеливые покупатели могут просто прервать процесс покупки и уйти к конкурентам. Несколько лет назад было проведено исследование о негативном влиянии капчи на конверсию. Если в случае с покупками пользователь может быть достаточно мотивирован, чтобы не бросить процесс из-за ввода символов, то на решение написать комментарий или отзыв в блоге это может повлиять с большей вероятностью.
Влияние на производительность сайта. Использование сторонних виджетов (как в случае с Google reCAPTCHA) приводит к снижению скорости загрузки сайта. Капча загружается с сервера поисковика, поэтому до того, как она полностью отобразится на странице, должно пройти некоторое время. Влияние на скорость может быть не очень критичным, но крайне важно подключать виджет только на тех страницах, где он действительно нужен.
Полагаться на что-то одно в современных условиях нельзя. Капчу нужно использовать в совокупности с другими методами защиты, а то и полностью заменить ее ими. Чтобы понять, насколько эффективно CAPTCHA справляется с отсеиванием фейкового трафика в каждом конкретном случае, нужно проводить тестирование и сравнивать разные меры безопасности.
Что можно использовать вместо капчи
Раз уж речь зашла о других методах защиты, кратко рассмотрим, что можно использовать на сайте кроме или вместо капчи.
Для начала необходимо определить, против чего вы боретесь.
Если сайт страдает от брутфорс-атак (такое чаще всего происходит с сайтами на бесплатных CMS), есть смысл установить файервол, использовать двухфакторную аутентификацию, изменить URL страницы входа и так далее. Вариантов в данном случае может быть много.
Если вы получаете тонны спама в комментариях и контактных формах, для WordPress пока не придумали лучшего решения, чем Akismet. С помощью специальных фильтров этот плагин отсеивает спам с высокой точностью. На моем сайте установлен плагин Simple CAPTCHA, но его наличие практически не повлияло на количество спама: Akismet по-прежнему выполняет львиную часть работы, блокируя комментарии, которым удалось просочиться через завесу капчи.
Бороться со спамом в формах можно и по-другому. Например, задавать полям уникальные названия, к которым боты не привыкли, или встраивать дополнительные невидимые для пользователей поля (в этом поможет плагин Honeypot). Последний метод роботы обходить уже научились, поэтому его эффективность находится под сомнением.
Если речь идет об интернет-магазинах, то здесь не обходится без регистрации с подтверждением e-mail или телефонного номера. Регистрация электронного ящика для ботов не такая большая проблема, а вот телефонный номер для них получить более проблематично. Авторизация посредством соцсетей тоже помогает отсеять фейки при регистрации.
Как поставить и настроить капчу на сайте
Процесс установки этой технологии на сайт не так прост, как кажется: нужно знать CSS и JavaScript. Даже если вы используете готовые решения, обойтись без базовых знаний кода не получится. Для разработчиков Google подготовил подробную инструкцию по установке reCAPTCHA. Если вы не уверены, что ваших навыков достаточно для правильной настройки работы скрипта, лучше опубликовать тендер для специалистов по техподдержке сайтов и передать задачу профессионалам.
Если у вас сайт на базе WordPress, Joomla! или Drupal, вы можете расслабиться: для вас разработчики придумали готовые решения в виде плагинов. Так как WordPress – самая популярная CMS в мире и в России, остановимся подробно на ней.
Для WordPress существует масса плагинов с различными вариантами капчи – от простых математических действий до вопросов с использованием логики. Чтобы не нагружать людей лишней головной болью, лучше выбрать самый простой и эффективный на данный момент вариант, а именно – невидимую капчу от Google. Для ее подключения и настройки есть несколько плагинов, самый простой и многофункциональный из которых – Invisible reCAPTCHA.
Более 100 000 установок плагина по всему миру
Чтобы капча начала работать, необходимо перейти в настройки Invisible reCaptcha и ввести специальные ключи. Чтобы их получить, войдите в свой аккаунт Google и перейдите на страницу reCAPTCHA для регистрации нового сайта.
В первой строке введите ярлык сайта (чтобы его можно было быстро найти по имени, если их подключено несколько), затем выберите вариант капчи (с заданиями и без), добавьте адрес сайта и поставьте галочку, подтверждая согласие с правилами использования сервиса.
Есть возможность выбрать предыдущую версию reCAPTCHA
После этого сервис предоставит вам два ключа.
Чтобы что-то изменить в предыдущем шаге, нажмите «Открыть настройки»
Полученные ключи необходимо вставить в соответствующие поля настроек плагина «Невидимая CAPTCHA».
Нам нужны первые два поля
Плагин позволяет добавлять капчу в различные формы (обратная связь, комментарии, вход в админ-панель, регистрация пользователей). Для этого достаточно просто переместиться в соответствующий раздел и поставить нужные галочки.
В разделе WordPress можно настроить показ капчи на формах, предусмотренных изначально самой CMS
Если вы используете WooCommerce, управление показом капчи на уязвимых страницах магазина осуществляется в соответствующей вкладке. То же самое с остальными плагинами, в том числе с контактными формами.
Так как капча невидимая, в установленных местах вы ее не обнаружите. Понять, работает ли она, можно по значку в правом нижнем углу на страницах с формами.
На всех страницах, где активирована капча, вы будете видеть вот такой значок
Этот значок можно скрыть. В настройках плагина есть специальное поле, в которое можно ввести соответствующий код:
Перейдите в настройки Invisible reCaptcha и вставьте этот код в поле «Пользовательский CSS значка».
Значок будет скрыт, но капча продолжит действовать
В разделе аналитики (ссылка на нее появится после регистрации сайта в reCAPTCHA) можно посмотреть статистику подозрительных запросов.
Сайт только что зарегистрирован, поэтому данных пока нет
Если капча нужна только для контактной формы, реализованной с помощью плагина Contact Form 7, дополнительных плагинов устанавливать не нужно. В меню есть раздел «Интеграция», в котором можно в два клика подключить reCAPTCHA.
Плагин позволяет интегрировать контактную форму с reCAPTCHA
Нажмите кнопку «Настройки интеграции» и вставьте в соответствующие поля ранее полученные ключи.
После ввода не забываем нажать «Сохранить изменения»
CAPTCHA как способ заработка: стоит ли оно того
Возможность зарабатывать на капче у интернет-пользователей появилась довольно давно, когда те самые ранее упомянутые специализированные сервисы начали использовать труд реальных людей для обхода мер защиты на сайтах.
Для тех, кто сотрудничает с такими сервисами и присылает им капчу для разгадывания, такое сотрудничество очень выгодно. Чего нельзя сказать о самих работниках, которые получают за решенные задания сущие копейки. Именно поэтому такой способ заработка распространен в странах с низким уровнем дохода.
Самый крупный сервис по распознаванию капчи в России – RuCaptcha. Максимум, который здесь может получить работник за 1000 угадываний, – 160 рублей.
Обычные картинки с текстом вообще оцениваются в 44 рубля за 1000, хотя по сложности они зачастую не сильно уступают рекапче
На выполнение 1000 разгадываний можно потратить несколько дней. Если добавить сюда простои, которые часто бывают в работе, когда новых заданий просто нет, момент получения заветной суммы в 100 рублей отложится еще на какой-то срок. Также важно помнить, что ошибки здесь строго наказываются и что аккаунт может быть заблокирован в любой момент.
Но даже если вам и удастся получить какие-то деньги, вы потратите столько усилий и времени, что поневоле задумаетесь, стоит ли продолжать работать на таких условиях.
Не забывайте о новых методах защиты
Мы живем в мире, где искусственный интеллект вышел на уровень, который позволяет роботам писать тексты и создавать уникальные фото несуществующих людей. Защита сайтов в таких условиях просто не может ограничиваться одним лишь способом, придуманным еще 20 лет назад. Как бы ни совершенствовалась капча, она безнадежно устаревает как метод защиты. Чтобы выжить, ей необходимо кардинально преобразиться и перейти к принципиально новым алгоритмам работы. Возможно, через десяток лет мы полностью забудем о необходимости вводить зачеркнутые символы и отмечать светофоры на картинках, доказывая свою человечность.
Как это работает: CAPTCHA
Сколько лет существует Хабр — столько лет на нём регулярно появляются посты про очередную капчу — будь то скрипт генерации картинки, новая идея капчи с котиками и тому подобное. Самый свежий пример того, что человек не совсем понимает — как же всё таки должна работать капча (см. текст поста и последние комментарии), но при этом делится своими заблуждениями с сообществом. Складывается ощущение, что капча — это такая terra incognita для большинства разработчиков — как для тех, кто просто прикручивает её к очередной форме в надежде на то, что она будет работать «из коробки», так и для тех кто придумывает капчи вроде тех, на которых надо выбрать картинку с котиком из нескольких фото.
Статья содержит полезную информацию для тех, кто использует капчу на своём сервере, вместо того чтобы довериться стороннему сервису вроде reCaptcha.
Captcha
Согласно своему определению, captcha — это автоматизированный публичный тест Тьюринга (тест который может пройти человек, но не компьютер). В статье я буду рассматривать свойтсва капчи на примере самого распространненого её вида — текста на картинке, хотя почти все написанное одинаково применимо к любому виду капчи.
Два главных свойства капчи
Любая капча должна обладать двумя свойствами, без которых она не будет работать:
Устойчивость к распознаванию — свойство, защищающее капчу от распознавания алгоритмом — например системой распознавания текста. Гарантирует то, что человек сможет прочитать текст на картинке, а компьютер нет.
Антипример: стандартная капча форумов phpBB 2.x таким свойством не обладала — из-за относительной простоты распознавания появились скрипты, которые спамили все подряд форумы вынуждая веб-мастеров менять капчу на более стойкую.
Устойчивость к угадыванию — свойство капчи, не позволяющее угадать её значение за небольшое число попыток (менее 1000). Если набор возможных значений капчи невелик, программе не составит труда угадать её подбором вместо распознавания.
Антипример: арифметическая капча вроде «1+2» (перебор чисел от 1 до 20 в скором времени даст результат).
Антипример: выбрать из нескольких картинок ту, на которой изображён котик.
Проверка капчи
Значение для проверки должно храниться на сервере, а не передаваться вместе с картинкой в браузер. Для сопоставления посетителя и правильного значения капчи необходимо использовать некий ключ, который передаётся вместе с капчей (идентификатор сессии, номер капчи и т.п.)
Антипример: если передавать саму капчу и значение для ее проверки (в том числе зашифрованное), то человеку достаточно один раз распознать такую капчу и далее использовать комбинацию «ответ»-«значение для проверки» в своём скрипте (по ссылке в начале поста как раз такой случай)
После проверки, сохраненное значение капчи необходимо удалить. Если не сделать этого, злоумышленник сможет использовать данное значение снова неограниченное число раз. Да, при обновлении страницы с формой обновляется и капча (либо при генерации формы, либо при генерации картинки), вот только скрипт может не загружать форму снова (надо упомянуть, что это не актуально если на сайте используются одноразовые csrf-токены для форм).
Антипример: гипотетическая форма логина, в которой достаточно один раз ввести капчу правильно, и далее подбирать пароль скриптом, избегая перегенерации капчи на сервере.
Пуленепробиваемая капча
Защита от перебора. Если ваша капча устойчива к распознаванию, но не очень устойчива к перебору (например на ней надо прочитать всего 3-4 цифры), желательно ограничить число неправильных ответов «с одного ip» / «для одного логина» / etc. Такие ограничения необходимо проверять ДО проверки самой капчи (то есть даже в случае правильно введенной капчи, при наличии ограничения она не должна считаться пройденной) иначе оно не будет препятствовать перебору.
Защита от DoS. При генерации капчи на своем сервере, надо понимать что это удобный вектор проведения DoS атак (которую, в отличие от DDoS, может устроить любой школьник). Для защиты можно ограничить число генерации капчи для одного ip, кэшированием капч и т.д. Подробнее про это
Защита от распознавания. Если вы выбираете капчу, или вдруг собираетесь написать её сами, желательно понимать какая капча более защищена от распознавания. Существуют готовые универсальные скрипты распознавания капчи, работающие по принципу OCR, а в случае если ваш сайт заинтересует спамеров есть риск, что будут использовать / писать скрипт конкретно под вашу капчу. Последнее правда относится больше к сайтам уровня Яндекс или vk, а вот вариант с защитой от банальных OCR желательно предусмотреть.
Защита от антигейтов. Если говорить формально, то капча как тест Тьюринга не обязана защищать вас от антигейтов, так как в этом случае её будет распознавать человек. С практической же точки зрения, этот вопрос весьма актуален и защищаться как-то надо.
Тут нет и не может быть «золотого стандарта» (ибо в таком случае антигейты внедрят его поддержку), поэтому вы вольны дополнять капчу любыми ухищрениями, чтобы сделать её распознавание через антигейт невозможным. Например:
— нестандартная капча (сбор паззла, поворот изображения, клик по области на фото и т.п.);
— кириллическая капча — самое простое решение, но имеет ряд минусов: подходит только для проектов с русскоязычной аудиторией, есть антигейты с поддержкой кириллицы;
— использование виртуальной клавиатуры рядом с капчей для ввода нестандартных символов или фигур (может быть неудобно пользователям мобильных);
Юзабилити
Не просите ввести капчу, если вы уже убедились, что перед вами человек. Тут однако, надо быть осторожным, чтобы форму нельзя было использовать скриптом неограниченное число раз после однократного ввода капчи человеком.
Пример: форма регистрации. Если я где-то регистрируюсь, и забыл ввести поле «почтовый индекс», но правильно ввёл капчу — не надо показывать мне новую. Потратьте 10 минут на то, чтобы сохранить где-то у себя, что вот эту конкретную форму сейчас пытается заполнить живой человек.
Для облегчения распознавания человеком: не используйте в капче одновременно буквы и цифры, не используйте одновременно прописные и строчные буквы, исключите похожие символы.
Отказ от использования капчи
Лучшая капча — отсутствие капчи. Там где можно отказаться от её использования — это надо сделать. Возможно для этого придется реализовать дополнительные лимиты и проверки, но пользователи скажут вам спасибо.
Но тут надо быть очень осторожным. Например: форма регистрации без капчи, с полем email на который приходит письмо с активацией. Без дополнительных средств защиты такую форму могут завалить «левыми» адресами, и ваш сайт включат в черные списки почтовые службы. В таком случае можно обходиться без капчи, но только если у вас есть другой рубеж защиты, вроде лимита по ip.
Кому то информация в этом топике покажется очевидной, но если бы я не сталкивался с примерами непонимания этих простых принципов в жизни, в том числе у опытных коллег-разработчиков, я бы не стал тратить время на написание этого текста.