Перейти к основному содержимому

Журнал изменений Captcha

Version: 1.5.0 - Выпущено 2026-05-22

  • Новое: Жёсткий ограничитель частоты — считает каждый GET и POST на поверхностях, защищённых captcha (wp-login / register / lost-password / comments, WooCommerce my-account / checkout / pay-for-order, Ultimate Multisite checkout / inline-login), и отвечает HTTP 429, заголовком Retry-After и рандомизированной tarpit-задержкой (1–5 с, с жёстким пределом 15 с).
  • Новое: Настройки cap_rate_limit_tarpit_min / cap_rate_limit_tarpit_max для настройки окна tarpit.
  • Новое: Фильтр wu_cap_rate_limit_whitelist_ip для исключения доверенных диапазонов IP.
  • Новое: Действие wu_cap_rate_limit_will_block, которое срабатывает непосредственно перед отправкой жёсткого ответа.
  • Новое: Устойчивая к подмене детекция IP клиента. Captcha_Core::get_client_ip() (источник истины для ключей корзин ограничителя частоты, captcha siteverify remoteip и IP-хешей статистики) теперь применяет строгую модель доверия: REMOTE_ADDR является базовым уровнем, CF-Connecting-IP учитывается только когда непосредственный узел находится внутри актуального диапазона IP Cloudflare, а X-Forwarded-For учитывается только когда непосредственный узел входит в настроенный администратором список доверенных прокси, с проходом справа налево, который пропускает доверенные/CF-переходы перед выбором IP посетителя.
  • Новое: Настройка cap_trust_cloudflare_headers (по умолчанию OFF) — включите доверие к CF-Connecting-IP, когда сайт находится за Cloudflare. Plugin поставляется со встроенным снимком Cloudflare CIDR и обновляет его еженедельно через wp-cron, используя встроенный запасной вариант, если обновление не удаётся.
  • Новое: Настройка cap_trusted_proxies — текстовая область с CIDR или простыми IP (по одному на строку, комментарии # разрешены), перечисляющая ваши собственные фронтовые прокси / балансировщики нагрузки. Без этого X-Forwarded-For игнорируется, даже когда ограничитель частоты включён.
  • Новое: Автоопределение при первом включении вероятной конфигурации Cloudflare / прокси с уведомлением администратора «Применить обнаруженные настройки» в один клик. Plugin никогда не перезаписывает ваши сохранённые значения; если последующий трафик показывает, что ваша конфигурация больше не соответствует реальности (например, Cloudflare изменил диапазоны CIDR, и ваш прокси CIDR теперь устарел), появляется неотклоняемое уведомление о несоответствии с рекомендуемым обновлением.
  • Исправлено: Невидимый режим больше не понижает молча cap_security_level до FAST — настроенный администратором уровень соблюдается. Новый фильтр wu_cap_server_security_level доступен для сайтов, которым нужна индивидуальная логика.
  • Исправлено: Счётчик статистики rate_limits_triggered теперь увеличивается при каждой блокировке, а не только на редком резервном пути после успешной проверки.
  • Исправлено: Captcha_Core::get_client_ip() теперь является единым источником истины для привязки IP посетителя во всём ограничителе частоты, провайдерах captcha (reCAPTCHA + hCaptcha siteverify) и статистике — закрыт вектор подмены, при котором прямые запросы к исходному серверу с поддельным заголовком CF-Connecting-IP попадали бы в корзину по поддельному IP вместо реального узла.
  • Исправлено: Шлюз ограничения частоты классического checkout WooCommerce теперь срабатывает на template_redirect (приоритет 1) вместо woocommerce_before_checkout_form. Хук уровня формы никогда не срабатывает, когда корзина пуста, поэтому flood-трафик, который никогда не добавляет продукт, полностью обходил ограничитель.
  • Исправлено: Шлюз ограничения частоты WooCommerce pay-for-order теперь срабатывает на template_redirect вместо woocommerce_before_pay_action. Последний срабатывает только после успешного wp_verify_nonce('woocommerce-pay'), что означает, что неавторизованные злоумышленники (реальная модель угроз) никогда не запускали ограничитель.
  • Исправлено: Шлюз ограничения частоты checkout WooCommerce Store API (blocks) теперь срабатывает на rest_pre_dispatch вместо woocommerce_store_api_checkout_update_order_from_request. Последний срабатывает только после того, как Store API проверит корзину и поля биллинга, поэтому неавторизованные боты получали 400 от валидатора и никогда не запускали ограничитель.
  • Исправлено: Шлюз ограничения частоты inline-login Ultimate Multisite теперь срабатывает на wu_ajax_nopriv_wu_inline_login с приоритетом 1 (и зеркале для вошедших пользователей) вместо wu_before_inline_login. Последний срабатывает только после успешного check_ajax_referer('wu_checkout'), поэтому неавторизованные боты без действительного wu_checkout nonce получали 403 и никогда не запускали ограничитель.
  • Исправлено: Rate_Limiter::enforce() теперь применяет защиту один раз на запрос с ключом surface|ip, поэтому вышестоящие хуки, которые срабатывают дважды за один рендеринг (особенно wu_setup_checkout в Ultimate Multisite), больше не уменьшают эффективный порог ограничения частоты вдвое.
  • Исправлено: Шлюзы поверхностей ограничения частоты больше не обращаются к Captcha_Core::is_whitelisted() (фильтр wu_captcha_whitelisted). Этот фильтр сигнализирует «captcha уже обработана другой поверхностью» и не связан с защитой от flood — интеграция WooCommerce использовала его, чтобы пропускать captcha входа WordPress, когда присутствовал Woo nonce, что попадало в подсчёт частоты и позволяло Woo POST обходить ограничитель. Специфичный для ограничения частоты фильтр wu_cap_rate_limit_whitelist_ip — единственный обход, который теперь применяется.

Version: 1.3.2 - Выпущено 2026-01-27

  • Исправлено: Виджет Cap не отображался на формах checkout, использующих Elementor или другие конструкторы страниц
  • Исправлено: Пользовательский элемент cap-widget удалялся санитаризацией wp_kses()
  • Улучшено: Использование вызываемого содержимого для поля checkout captcha, чтобы обходить фильтрацию HTML
  • Улучшено: Упрощён JavaScript с резервным вариантом для крайних случаев

Version: 1.3.1 - Выпущено 2026-01-26

  • Исправлено: Невидимый режим Cap Captcha не решался автоматически на динамических формах checkout Ultimate Multisite
  • Улучшено: Скрипт Cap checkout теперь использует MutationObserver для обнаружения динамически загружаемых виджетов
  • Улучшено: Добавлен перехват кнопки checkout для ожидания token перед отправкой

Version: 1.3.0 - Выпущено 2026-01-27

  • Новое: интеграция оформления заказа WooCommerce Blocks с перехватом запросов Store API
  • Новое: поддержка невидимой captcha для оформления заказа WooCommerce (hCaptcha invisible, reCAPTCHA v2 invisible, v3)
  • Новое: отдельная страница настроек для использования без Ultimate Multisite
  • Новое: Jetpack Autoloader для предотвращения конфликтов зависимостей
  • Исправлено: hCaptcha не отображалась при динамическом оформлении заказа Ultimate Multisite (контент, загруженный через AJAX)
  • Исправлено: Captcha не обновлялась/сбрасывалась при возникновении ошибок проверки формы
  • Исправлено: hCaptcha не отображалась на странице оформления заказа WooCommerce
  • Исправлено: ошибка «класс reCAPTCHA не найден» (добавлена PHP-библиотека google/recaptcha)
  • Улучшено: обнаружение ошибок через хуки WordPress, MutationObserver и перехват AJAX
  • Улучшено: описания настроек теперь включают URL Dashboard для API-ключей

Version: 1.2.2 - Выпущено 2026-01-24

  • Исправлено: Captcha не отображалась в элементе формы входа Ultimate Multisite (несоответствие имени фильтра формы)
  • Исправлено: HTML виджета Cap удалялся при санитизации wp_kses()
  • Исправлено: JavaScript-селекторы не находили формы со слешами в ID элементов
  • Добавлено: хук фильтра wu_kses_allowed_html для classaddons, позволяющий расширять разрешенные HTML-теги
  • Удалено: неиспользуемые JavaScript-файлы, замененные скриптами для конкретных провайдеров

Version: 1.2.1 - Выпущено 2026-01-23

  • Исправлено: проверка токена Cap Captcha не работала в multisite-средах (теперь используются transients на уровне сети)
  • Исправлено: Captcha теперь стабильно отображается для всех пользователей независимо от статуса входа
  • Исправлено: несоответствие между отображением и проверкой captcha, которое вызывало сбои оформления заказа

Version: 1.2.0 - Выпущено 2026-01-21

  • Новое: Cap Captcha — самостоятельно размещаемая captcha на основе proof-of-work, включенная по умолчанию при активации
  • Новое: защита без настройки — активируйте addon, и защита сразу включена
  • Новое: полиморфная архитектура провайдеров captcha для легкого расширения
  • Новое: защита оформления заказа WooCommerce Store API от атак с тестированием карт
  • Новое: Dashboard отслеживания статистики, показывающий задания, проверки и заблокированные атаки
  • Новое: предустановки уровня безопасности (Fast, Medium, Max) для сложности Cap Captcha
  • Новое: абстрактные базовые классы для провайдеров reCAPTCHA и hCaptcha
  • Улучшено: кодовая база переработана в модульные классы провайдеров
  • Улучшено: лучшее разделение ответственности с выделенным классом менеджера
  • Fixed: Security improvements for $_SERVER variable sanitization
  • Исправлено: конфигурация тестов PHPUnit для соглашений об именовании WordPress

Version: 1.0.1 - Выпущено 2025-09-28

  • Переименован префикс в ultimate-multisite; обновлен text domain; повышена версия.