Rucaptcha вход: работа на вводе капч. Самый надёжный и простой заработок в интернете

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

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

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

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

Бесит!

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

Эта цифра увеличивается до 29%, если CAPTCHA чувствительна к регистру.

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

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

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

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

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

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

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

За эти годы 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. Расположить капчу на отдельном ресурсе
Вопрос только в том, есть ли у владельца сайта ресурсы, чтобы нанять разработчика, который сделает это качественно.

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

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

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

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

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

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

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

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

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

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

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

Вход в Личный кабинет

Личный кабинет

Введите данные

Фамилия *

Отчество

Наименование организации (юридического лица)

Email *

Пароль *

Повторите пароль *

Телефон

Регион Не выбранРеспублика КарелияРеспублика КомиАрхангельская областьВологодская областьКалининградская областьЛенинградская областьМурманская областьНовгородская областьПсковская областьг. Санкт-ПетербургНенецкий автономный округРеспублика БашкортостанРеспублика БурятияРеспублика ДагестанРеспублика Марий ЭлРеспублика МордовияРеспублика Саха (Якутия)Республика ТатарстанУдмуртская РеспубликаЧеченская РеспубликаЧувашская РеспубликаАлтайский крайРеспублика АлтайЗабайкальский крайКамчатский крайКраснодарский крайРеспублика АдыгеяКрасноярский крайРеспублика ХакасияРеспублика ТываПермский крайПриморский крайКабардино-Балкарская РеспубликаКарачаево-Черкесская РеспубликаРеспублика ИнгушетияРеспублика Северная Осетия — АланияСтавропольский крайХабаровский крайМагаданская областьЕврейская автономная областьЧукотский автономный округАмурская областьАстраханская областьРеспублика КалмыкияБелгородская областьБрянская областьВладимирская областьВолгоградская областьВоронежская областьИвановская областьИркутская областьКалужская областьКемеровская область — КузбассКировская областьКостромская областьКурская областьЛипецкая областьг. МоскваМосковская областьНижегородская областьНовосибирская областьОмская областьОренбургская областьОрловская областьПензенская областьРостовская областьРязанская областьСамарская областьСаратовская областьСахалинская областьСвердловская областьКурганская областьСмоленская областьТамбовская областьТверская областьТомская областьТульская областьТюменская областьХанты-Мансийский автономный округ – ЮграЯмало-Ненецкий автономный округУльяновская областьЧелябинская областьЯрославская областьРеспублика КрымХерсонская областьЗапорожская областьДонецкая народная республикаЛуганская народная республикаг. Севастополь

Населенный пункт

Почтовый индекс

Корпус/строение

Квартира

Подтверждаю, что я согласен(на) на обработку и хранение моих персональных данных

volume_up

Контрольный код *

javascript — Как написать текст в текстовую область с помощью python?

У меня есть код для разгадывания тестовой капчи. Приходит токен решения капчи, далее с кодом открывается дисплей для ввода токена, но как ни пытаюсь не могу ввести токен по коду ниже https://2captcha.com/demo/hcaptcha

 по определению Решатель():
    драйвер = webdriver.Chrome()
    driver.get(страница_url)
    время сна(10)
    каждый_элемент = driver.find_elements(By.NAME, "h-captcha-response")
    для элемента в each_element:
        display_prop = element.value_of_css_property («отображение»)
        если display_prop == 'нет':
            driver.execute_script("аргументы[0].style.display = 'блок';", элемент)
    u1 = f"http://rucaptcha.com/in.php?key={API_KEY}&method=hcaptcha&sitekey={data_sitekey}&pageurl={page_url}&json=1&invisible=1"
    r1 = запросы.get(u1)
    печать (r1.json())
    rid = r1.json(). Получить ("Запрос")
    u2 = f"https://rucaptcha.com/res.php?key={API_KEY}&sitekey={data_sitekey}&action=get&id={int(rid)}&json=1"
    время сна(5)
    пока верно:
        r2 = запросы.get(u2)
        печать (r2. json())
        если r2.json().get("status") == 1:
            form_token = r2.json(). Получить ("запрос")
            перерыв
        время сна(5)
    write_token_js = f'document.getElementsByName("h-captcha-response").innerHTML"{form_token}";'
    время сна(5)
    submit_js = driver.find_element(By.CSS_SELECTOR, "#root > div > main > div > раздел > form > button._2iYm2u0v9LWjjsuiyfKsv4._1z3RdCK9ek3YQYwshGZNjf._3zBeuZ3zVV-s2YdppESngy._28oc7jlCOdc1KAtktSUZvQ")
    submit_js.click()
    driver.execute_script (write_token_js)
    время сна(10)
если __name__ == '__main__':
    Решатель ()
 
  • javascript
  • python
  • selenium
  • textarea
  • captcha

Я исправил это, используя этот код:

 write_token = driver.find_element(By.NAME, "h-captcha-response")
write_token.send_keys(f"{form_token}")
 

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

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

技术篇:使用gem ‘rucaptcha’实作验证码功能 « Блог xyy601

一.本地实作验证码功能
step1.在G emfile加入gem ‘rucaptcha’和’dalli’

 gem 'rucaptcha'
драгоценный камень «далли»
 

运行 bundle install
重启 rails s

step2.新建rucaptcha.rb文件
执行 touch config/initializers/rucaptcha .rb
在其中加入代码:

 RuCaptcha.configure do
  # Цветовой стиль, по умолчанию: :colorful, позволяет: [:colorful, :black_white]
  # self.style = :красочный
  # Время истечения пользовательского кода капчи, если вам нужно, по умолчанию: 2 минуты
  # self.expires_in = 120
  # [Требование / 重要]
  # Сохраняем код Captcha, где этот конфиг больше похож на Rails config.cache_store
  # по умолчанию: Чтение информации о конфигурации из `Rails.application.config.cache_store`
  # Но требования RuCaptcha cache_store не в [:null_store, :memory_store, :file_store]
  # 默认:会从 Rails 配置的 cache_store 里面读取相同的配置信息,用于存储验证码字符
  # 但如果是 [:null_store, :memory_store, :file_store] 之类的,你可以通过下面的配置项单独给 RuCaptcha 配置 cache_store
  self. cache_store = :mem_cache_store
конец
 

step3.执行下列命令
rails g devise:controllers users
rails g devise:views users
补充:
rails g devise:views 生成的文件夹名字默认为devise
rails g devise:views users 生成的

step4.users/registrations_controller.rb

 class Users::RegistrationsController < Devise::RegistrationsController
  деф создать
    build_resource (sign_up_params)
    если verify_rucaptcha?(ресурс) && resource.save
      дать ресурс, если block_given?
      если ресурс.сохранился?
        если resource.active_for_authentication?
          set_flash_message! :уведомление, :signed_up
          sign_up (имя_ресурса, ресурс)
          ресурс response_with, расположение: after_sign_up_path_for(ресурс)
        еще
          set_flash_message! :уведомление, :"signed_up_but_#{resource.inactive_message}"
          expire_data_after_sign_in!
          ресурс response_with, расположение: after_inactive_sign_up_path_for(ресурс)
        конец
      еще
        ресурс clean_up_passwords
        set_minimum_password_length
        ресурс response_with
      конец
    еще
      ресурс clean_up_passwords
      ресурс response_with
    конец
  конец
конец
 

step6. 修改users/registrations/new.html.erb
加入代码:

 
<%= f.input :email, обязательно: true, автофокус: true %> <%= f.input :password, required: true, hint: ("#{@minimum_password_length} минимум символов", если @minimum_password_length) %> <%= f.input :password_confirmation, требуется: true %> + <%= rucaptcha_image_tag(alt: 'Captcha') %> + <%= rucaptcha_input_tag(класс: 'form-control', заполнитель: '请输入验证码') %>

step7.同样的方式实作password和вход в систему
(1)为password页面添加验证码

app/controllers/passwords_controller.rb
класс PasswordsController < Devise::PasswordsController
  деф создать
    self.resource = resource_class.find_or_initialize_with_errors(Devise.reset_password_keys, resource_params, :not_found)
    если self.resource.persisted? && verify_rucaptcha?(ресурс)
      self.resource.send_reset_password_instructions
    конец
    дать ресурс, если block_given?
    если успешно_отправлено?(ресурс)
      response_with({}, расположение: after_sending_reset_password_instructions_path_for(resource_name))
    еще
      response_with (ресурс)
    конец
  конец
конец
 
пользователи/пароли/new. html.erb
 + <%= rucaptcha_image_tag(alt: 'Captcha') %>
+ <%= rucaptcha_input_tag(класс: 'form-control', заполнитель: '请输入验证码') %>
 

(2)Войти в систему 页面添加验证码

app/controller/sessions_controller.rb
класс SessionsController < Devise::SessionsController
  prepend_before_action :valify_captcha!, только: [:create]
  деф валифи_капча!
    разве verify_rucaptcha?
      redirect_to new_user_session_path, предупреждение: t('rucaptcha.invalid')
      возвращаться
    конец
    истинный
  конец
конец
 
пользователи/сеансы/new.html.erb
 + <%= rucaptcha_image_tag(alt: 'Captcha') %>
+ <%= rucaptcha_input_tag(класс: 'form-control', заполнитель: '请输入验证码') %>
 

step7.修改routes文件

 Rails.application.routes.draw сделать
  ...
  смонтировать RuCaptcha::Engine => "/rucaptcha"
  - devise_for: пользователи
+ devise_for: пользователь, контроллеры: {
+ пароли: 'пользователи/пароли',
+ регистрации: 'пользователи/регистрации',
+ сеансы: 'пользователи/сеансы'
+ }
  . ..
конец
 

此时,如果在相应的页面输入验证码,会发生报错:

step8.安装memcached
在终端输入
brew install memcached

brew services start memcached
重启рельсы s
这样就可以在本地进行验证码使用了。

二.将验证码功能推到heroku上
按照上述方法在本地实作好验证码功能后,如果要上传到heroku,进行如下步骤: 90 051 (1)新建分支
git checkout -b rucaptcha-heroku
(2)在heroku上启用memcachier这个服务
选择element

点击просмотреть все дополнения

选择memcachier

点击安装
900 51 选择需要安装该服务的app

点击provision会提示绑定 кредитная карта

点击Настройки аккаунта选择添加биллинг,添加信用卡

(3)启动服务后,执行 heroku addons:create memcachier: dev
(4)移除原来的rucaptcha.rb
mv config/initializers/rucaptcha .rb config/initializers/rucaptcha.rb.temp

(5)修改config/environments/production.rb

 Rails.application.configure do
+ config.cache_store = :dalli_store,
+ (ENV["MEMCACHIER_SERVERS"] || "").split(","),
+ {:username => ENV["MEMCACHIER_USERNAME"],
+ :password => ENV["MEMCACHIER_PASSWORD"],
+ :failover => правда,
+ :socket_timeout => 1,5,
+ :socket_failure_delay => 0,2,
+ :down_retry_delay => 60
+ }
конец
 

(6) 保存修改,上传到heroku
git add .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *