Гид по технологиям

Как работают CAPTCHA и как создавать их на Python

7 min read Безопасность Обновлено 03 Jan 2026
Как работают CAPTCHA и как создавать их на Python
Как работают CAPTCHA и как создавать их на Python

Иконка ReCAPTCHA на фоне кода

Что такое CAPTCHA

CAPTCHA — сокращение от Completely Automated Public Turing test to tell Computers and Humans Apart. Проще: это автоматизированный тест, призванный отличать человека от программ-ботов.

Основная идея основана на задачах, которые человеку легко решить, а машине — сложно. Речь о распознавании и интерпретации искажённых символов, объектов на изображениях, аудио с шумом и т.п.

Определение термина: CAPTCHA — автоматизированный тест для разделения человека и машины.

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

Типы CAPTCHA

Ниже перечислены распространённые варианты CAPTCHA с кратким описанием достоинств и ограничений.

Текстовая CAPTCHA на изображении

Традиционная форма: набор букв, цифр и символов, искажённых графически. Искажения включают вращение, смещение, наложение линий и шум. Такие тесты просты в генерации, но уязвимы для современных OCR и нейросетей при слабой защите.

Когда подходит: простые формы регистрации, низкая ценность атаки.

Когда не подходит: критические системы, где злоумышленник использует ML-решения.

Аудио CAPTCHA

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

Замечание: модуль captcha для Python поддерживает генерацию аудио, но некоторые реализации ограничивают набор символов (обычно цифры).

Графическая CAPTCHA

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

Когда подходит: интерфейсы для широкой аудитории, где важен UX.

Математические и логические задачи

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

Ограничение: удобство и доступность. Могут мешать пользователям и быть автоматизированы при стандартных шаблонах.

No CAPTCHA ReCAPTCHA и поведенческие тесты

Решения вроде Google ReCAPTCHA используют анализ поведения (движения мыши, время на странице), а для подозрительных сессий выдают дополнительные задания. Они просты для пользователей, но означают передачу данных третьей стороне и потенциальные вопросы приватности.

Important: учитывайте политику конфиденциальности и требования локального законодательства при использовании внешних сервисов.

Модуль CAPTCHA для Python

Python-пакет captcha позволяет быстро генерировать изображение с текстом и аудиофайлы для простых проверок. Установка выполняется через pip:

pip install captcha

Пакет содержит два основных компонента: ImageCaptcha и AudioCaptcha. Ниже — практическое руководство по генерации и сохранению файлов.

Как сгенерировать текстовую CAPTCHA в Python

Ниже шаги и исходный код, приведённый в поясняющих блоках. Код работает с модулем captcha и сохраняет PNG-файл с изображением CAPTCHA.

  1. Импортируйте ImageCaptcha:
# importing the required libraries  
from captcha.image import ImageCaptcha
  1. Укажите размер изображения и создайте объект:
# specify dimensions  
image = ImageCaptcha(width = 300, height = 100)
  1. Получите строку от пользователя:
# enter the text to create its captcha  
captcha_text = input("Please enter text: ")
  1. Сгенерируйте данные изображения:
# generate the text-based captcha  
data = image.generate(captcha_text)
  1. Сохраните изображение:
# save the captcha image file  
image.write(captcha_text, (captcha_text) + ".png")

Пояснения к коду:

  • image.generate возвращает поток байтов с изображением; можно отправить его напрямую в HTTP-ответ.
  • image.write сохраняет файл на диск; имя файла в примере сформировано из текста CAPTCHA, для безопасности лучше давать случайные имена.
  • Не используйте открытый текст CAPTCHA в названии файла в продакшене.

Кастомизация:

  • Шрифты: можно передать свой список шрифтов в ImageCaptcha для изменения визуального стиля.
  • Фон и шум: добавляйте линии, точки или искажение для повышения устойчивости к OCR.
  • Длительность жизни: генерируйте токен и храните ожидаемое значение в серверной сессии или в базе на короткое время.

Примеры выходных изображений

Пример сгенерированного изображения CAPTCHA

Описание: пример варианта с различной цветовой палитрой и искажающими элементами.

Ещё один пример сгенерированного изображения CAPTCHA

Описание: второй пример с другим наклоном и стилем шрифта.

Как сгенерировать аудио CAPTCHA в Python

Шаги для создания аудиофайла с цифрами:

  1. Импортируйте AudioCaptcha:
# importing the required libraries  
from captcha.audio import AudioCaptcha
  1. Создайте экземпляр:
# creating an audio instance  
audio = AudioCaptcha()
  1. Получите число от пользователя:
# audio captcha number, eg: 32135  
captcha_text = input("Please enter number: ")
  1. Сгенерируйте аудио поток:
# generate the audio-based captcha  
audio_data = audio.generate(captcha_text)
  1. Сохраните в WAV-файл:
# save the audio file  
audio.write(captcha_text, "audio"+captcha_text+'.wav')

Пример: при вводе 970322 будет создан файл audio970322.wav с озвучиванием цифр и фоновыми шумами.

Безопасность и доступность:

  • Для пользователей с нарушениями зрения отдавайте аудио-альтернативу и обеспечьте перевод звуков в понятный формат.
  • Контролируйте громкость и уровень шума — слишком высокий шум ухудшает опыт пользователя.

Когда CAPTCHA не работают или неэффективны

  • Современные модели распознавания изображений и синтеза речи могут обходить простые тесты.
  • Автоматические решения, распознающие шаблоны интерфейса, могут пройти тесты без человеческого вмешательства.
  • CAPTCHA ухудшают UX и могут снизить конверсию при злоупотреблении.
  • Атаки с человеческим фулфилментом: злоумышленник использует сервисы «капча-решальщиков», где люди массово решают CAPTCHA за деньги.

Контрмеры:

  • Используйте многоуровневую защиту: rate limiting, поведенческий анализ, проверку сессий и токены.
  • Централизованно отслеживайте подозрительные IP и паттерны.

Альтернативы и дополнения к CAPTCHA

  • Honeypot-поля: невидимая форма для ботов; если поле заполнено — заблокировать.
  • Rate limiting: ограничение количества запросов с одного IP/учётной записи.
  • Поведенческий анализ: анализ траекторий мыши, времени заполнения формы, активности клавиатуры.
  • WebAuthn и FIDO2: для критичных операций используйте безпарольную аутентификацию.
  • Email/SMS подтверждение: подтверждение через второй фактор как дополнительный барьер.

Выбор зависит от рисков, бюджета и требуемого UX.

Практическая методология выбора CAPTCHA

  1. Оцените угрозы и цель защиты (спам, брутфорс, массовые регистрации).
  2. Определите допустимый уровень UX-потерь.
  3. Выберите комбинацию: легкая CAPTCHA + honeypot + rate limit для общего сценария; ReCAPTCHA или поведенческая аналитика для более строгих требований.
  4. Тестируйте на реальных пользователях и следите за отказами прохождения.
  5. Ревью и обновление: пересмотрите политику каждые 6–12 месяцев.

Роль-based чек-листы внедрения

Разработчик:

  • Интегрировать генерацию на сервере, не в клиентском JS.
  • Использовать случайные имена файлов и хранить ожидаемое значение в серверной сессии.
  • Ограничить попытки и логировать неудачные попытки.

Администратор безопасности:

  • Настроить мониторинг и оповещения по всплескам неудачных попыток.
  • Проводить ретроспективы при всплесках трафика.

QA:

  • Проверить доступность для вспомогательных технологий (экранных читалок).
  • Тестировать на разных браузерах и мобильных устройствах.

Критерии приёмки

  • CAPTCHA появляется и валидируется на сервере.
  • Действующие пользователи проходят проверку не более чем в 3 попытки.
  • Падение конверсии в критичных формах не превышает заранее согласованного порога.
  • Срабатывает защита от повторных запросов с одного источника.

Тест-кейсы и приёмочные сценарии

  • Ввод корректного текста/чисел: форма принимается, сессия создаётся.
  • Неправильный ввод: форма отклонена и логируется попытка.
  • Быстрые повторные запросы: применён rate limiting.
  • Пользователь со вспомогательными технологиями: есть альтернативный путь (аудио, подтверждение по почте).

Модель зрелости защиты CAPTCHA

  • Уровень 1 (Базовый): простые текстовые CAPTCHA + honeypot.
  • Уровень 2 (Средний): графические CAPTCHA, rate limiting, логирование.
  • Уровень 3 (Продвинутый): поведенческий анализ, блокировка подозрительных IP, MFA.

Примеры ошибок и крайние случаи

  • Переоптимизация шума делает CAPTCHA нечитаемой людям.
  • Использование внешних сервисов без согласия нарушает локальные нормы о конфиденциальности.
  • Автоматические решения распознают статичные шрифты и паттерны.

Note: при работе с персональными данными учитывайте требования локального законодательства и GDPR, если применимо.

Безопасность и приватность

  • Храните только хэши ожидаемых значений CAPTCHA, если нужно кэшировать.
  • Не отправляйте реальные ответы в URL‑параметрах.
  • При использовании сторонних сервисов (например, ReCAPTCHA) документируйте передачу данных и обеспечьте соответствие политике конфиденциальности.

Короткая методика интеграции в веб-приложение

  1. Генерация на сервере: создавайте изображение/аудио и связанный токен.
  2. Передача на клиент: отдавайте поток или ссылку с коротким временем жизни.
  3. Проверка: при отправке формы сравнивайте значение с серверным токеном и удаляйте токен по использованию.
  4. Логирование: фиксируйте метрики отказов и частоту успехов.

Выдержка эксперта

Эксперт по безопасности: «CAPTCHA остаётся полезным инструментом, но работать она должна в составе многоуровневой защиты — отдельно она не решит проблему современных автоматизированных атак.»

Ментальные модели и эвристики при выборе

  • Принцип 80/20: выберите решение, которое блокирует 80% атак с минимальными затратами на UX.
  • Защита в глубину: комбинируйте CAPTCHA с лимитами и аналитикой.
  • Пользователь прежде всего: отдавайте приоритет доступности для реальных людей.

1-строчный глоссарий

  • OCR — оптическое распознавание символов.
  • Honeypot — невидимое поле в форме для ловли ботов.
  • Rate limiting — ограничение частоты запросов.
  • ReCAPTCHA — сервис Google для защиты от ботов.

Краткое резюме

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

Важно: проверяйте доступность и приватность перед развёртыванием в продакшен.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство