Связаться
  • WordPress
  • Оплата
  • v1.0.0

Card Testing Shield для WooCommerce — защита чекаута от перебора украденных карт (card testing)

Плагин для WooCommerce, который останавливает перебор украденных карт на чекауте: считает попытки оплаты картой и отказы шлюза с одного IP-адреса, сессии браузера и e-mail, ставит растущую паузу после каждого отказа и отказывает ещё до того, как следующая попытка дойдёт до платёжного шлюза. Классический и блочный чекаут, «Оплатить заказ», «Добавить способ оплаты». Базовая версия бесплатна; Pro — лимиты на BIN карты и сеть, автоматическая блокировка во время волны отказов, списки блокировки, журнал до 90 дней и CSV.

Скачать Free
Pro · лицензия на год Чем больше сайтов, тем дешевле каждый
Совместимость
WooCommerce 8.0+ (проверено на 11.2) · WordPress 6.2+ (проверено на 7.1) · PHP 7.4+ (прогон на 8.3) · классический и блочный чекаут · Stripe, WooPayments, Braintree, Square, Authorize.Net, NMI и другие карточные шлюзы · счётчики в Redis, APCu или таблице БД
Лицензия
один сайт, годовая
Триал
7 дней, без карты, один на сайт
Обновлено
октябрь 2026
Или все 173 Pro-модулей в All Access — 4 990 ₴ / год

Что есть во Free,
а что даёт Pro

Бесплатная версия работает без ограничения по времени. Pro добавляет остальные функции из таблицы.

Функция Free Pro
Лимиты попыток оплаты картой и отказов шлюза на IP-адрес, сессию браузера (корзину) и e-mail плательщика за период (по умолчанию 60 мин) ✔ ✔
Растущая пауза после каждого отказа: 10, 20, 40 секунд и дальше до 5 минут ✔ ✔
Не больше 3 оплат за 10 секунд с одного адреса, браузера или аккаунта — параллельные запросы скрипта не доходят до шлюза ✔ ✔
Классический чекаут, блочный чекаут (Store API), «Оплатить заказ», «Добавить способ оплаты» (форма WooCommerce, Stripe, WooPayments) ✔ ✔
Отказы, о которых шлюз сообщает позже (вебхук, неудачный 3-D Secure), тоже учитываются — один раз ✔ ✔
Нейтральное сообщение покупателю без подсказки, какой именно лимит сработал; текст можно изменить ✔ ✔
Белый список: покупатели с оплаченными заказами, адреса и сети, e-mail и целые почтовые домены ✔ ✔
Режим наблюдения: журнал «отказал бы» без единого отказа ✔ ✔
Обзор по часам, поиск клиента по IP или e-mail и разблокировка одним кликом ✔ ✔
Журнал отказов и отклонённых оплат 7 дней до 90 дней
Счётчики в Redis или APCu (объектный кеш) либо в одной таблице БД; Cloudflare и другие прокси ✔ ✔
Админка на украинском, русском и английском ✔ ✔
Лимит на BIN карты (первые 6 цифр) для всех посетителей вместе — для шлюзов, которые передают номер карты на сайт (Authorize.Net, NMI) — ✔
Лимит отказов на сеть /24 (IPv4) или /48 (IPv6) — ✔
Автоматическая блокировка во время волны отказов: более жёсткие лимиты, по желанию без оплаты картой для гостей, письмо вам — ✔
Правила для «Добавить способ оплаты»: минимальный возраст аккаунта или только аккаунты с оплаченным заказом — ✔
Списки блокировки: IP-адреса и сети, e-mail и домены, BIN — ✔
Экспорт журнала в CSV — ✔

Как это выглядит

Сообщение покупателю, которому щит отказал, на блочном чекауте WooCommerce
Блочный чекаут тестового магазина после серии отклонённых оплат с одного адреса: нейтральное сообщение в стандартном блоке ошибок и сколько секунд осталось до следующей попытки. Тестовый магазин на английском; на русскоязычном сайте сообщение на русском.
Вкладка «Обзор» в Card Testing Shield
«Обзор» после симуляции атаки (админка на украинском): попытки оплаты картой, отклонённые шлюзом и отказанные щитом; блокировка (Pro); поиск клиента по IP или e-mail и разблокировка; таблица по часам.
Журнал отказов и отклонённых оплат
«Журнал» из тестового прогона (админка на английском): отклонённые оплаты и отказы щита с адресом, e-mail, способом оплаты, заказом и причиной — «пауза после отказа». Кнопка «Разблокировать» в каждой строке. Тестовый шлюз передаёт номер карты на сайт, поэтому виден BIN (Pro).

Триал стартует, когда вы попросите

Свежая установка — бесплатная версия, ничего не включается само. Кнопка «Попробовать Pro 7 дней» → e-mail → ключ сразу в окне и письмом.

Один ключ — один сайт

Переносите магазин — отвяжите лицензию на старом домене и активируйте на новом сами. Для студий — ключи на 5, 25 сайтов или без ограничений.

Технические требования

  • WooCommerce 8.0+ (проверено на 11.2.1), классический и блочный чекаут, «Оплатить заказ», «Добавить способ оплаты»
  • WordPress 6.2+ (проверено на 7.1) · PHP 7.4+ (полный прогон на PHP 8.3, на 7.4 — проверка синтаксиса)
  • Шлюзы: любой карточный через стандартные хуки WooCommerce. Отдельно подключены WooCommerce Stripe Gateway (проверено с 11.0.1, AJAX «Добавить способ оплаты» — с 9.7) и WooPayments (его AJAX-проверка карты, просмотрено на 11.2). Braintree, Square, Authorize.Net и NMI подключены по их исходному коду, живых оплат через них не было
  • BIN-лимит (Pro): только для шлюзов, которые передают номер карты или BIN на сайт — Authorize.Net, NMI, стандартная форма карты WooCommerce
  • Счётчики: объектный кеш Redis (проверено с Redis Object Cache), APCu или собственная таблица БД — щит выбирает самое быстрое из доступного
  • Прокси: Cloudflare (CF-Connecting-IP только из сетей Cloudflare) или заголовок вашего прокси либо балансировщика
  • Языки админки: украинский, русский, английский

История версий

v1.0.0 Текущая октябрь 2026

Лимиты попыток и отказов на адрес, сессию и e-mail; растущая пауза после отказов; лимит одновременных оплат; классический и блочный чекаут, «Оплатить заказ» и «Добавить способ оплаты»…

Вместе с Card Testing Shield для WooCommerce покупают

4 модуля одним заказом — на 40% дешевле, чем по отдельности

Набор «Старт магазина» Card Testing Shield Nova Poshta Premium Mono Acquiring Telegram-уведомления и Viber/SMS покупателям Нужно больше — все 173 модулей в All Access за 4 990 ₴.
2 490 ₴ / год вместо 4 160 ₴ поштучно
Купить набор →

Полное описание модуля

Card Testing Shield для WooCommerce — плагин против перебора украденных карт на чекауте. Card testing выглядит так: скрипт прогоняет через ваш магазин список номеров карт, одну мелкую оплату за другой, чтобы найти те, что ещё работают. Платит магазин: сотни отклонённых транзакций, комиссия шлюза за каждую попытку, чарджбэки, а позже — письмо от Stripe или банка-эквайра о замороженном или закрытом аккаунте.

Щит считает то, что тестировщик карт не может скрыть: сколько оплат картой приходит с одного IP-адреса, одной сессии браузера и одного e-mail и сколько из них шлюз отклонил. Когда лимит исчерпан, следующая попытка получает отказ ещё на вашем сервере — до платёжного шлюза она не доходит и комиссии не стоит. Настоящий покупатель этого не замечает: он делает одну оплату, редко две.

Для ботов, которые перебирают каталог и фильтры GET-запросами, у нас есть отдельный плагин — Crawler Shield для WooCommerce. Card Testing Shield защищает другое: POST-запросы оплаты на чекауте, «Оплатить заказ» и «Добавить способ оплаты». Они не мешают друг другу, на тесте стояли вместе.

Как это выглядит для покупателя

Обычный покупатель не видит ничего нового: та же форма, тот же шлюз. Тот, кто исчерпал лимит, получает нейтральное сообщение в привычном месте ошибок чекаута — без подсказки, какой именно лимит сработал: «Сейчас мы не можем принять от вас ещё одну оплату картой. Попробуйте позже, выберите другой способ оплаты или свяжитесь с нами». Во время короткой паузы добавляется, через сколько секунд можно попробовать снова. Текст сообщения можно изменить в настройках. Другие способы оплаты — перевод на счёт, наложенный платёж — остаются открытыми.

Попытка учитывается только тогда, когда WooCommerce принял форму и передаёт заказ шлюзу. Покупатель, который исправляет ошибку в адресе или забытое поле, попытку не тратит.

Что получает админ

  • WooCommerce → Card Testing Shield с вкладками «Обзор», «Правила» и «Журнал».
  • Обзор: попытки оплаты картой, отклонённые шлюзом и отказанные щитом за 24 часа и 7 дней; таблица по часам с колонкой «Отказал бы» для режима наблюдения.
  • «Покупатель не может оплатить?» — введите IP-адрес или e-mail: видно, что щит насчитал, до какого времени отказ и пауза, и кнопка «Разблокировать» сбрасывает всё сразу.
  • «Как щит видит этот магазин»: отслеживаемые способы оплаты, адрес, который щит видит для вас (с предупреждением, если это адрес сервера или прокси), где живут счётчики и включён ли встроенный «Rate limit Checkout» WooCommerce.

Журнал записывает каждую отклонённую оплату и каждый отказ щита: время, где (чекаут, блочный чекаут, «Оплатить заказ», «Добавить способ оплаты»), адрес, e-mail, способ оплаты, заказ и причину — например, «пауза после отказа» или «несколько оплат одновременно». Фильтры «Отказано», «Отказал бы», «Отклонено», «Блокировка». Повторные отказы одного и того же клиента во время атаки не пишутся в журнал по одному, чтобы не раздувать базу. Free хранит журнал 7 дней, Pro — до 90 с экспортом в CSV.

Как это работает — шаг за шагом

  1. Какие способы оплаты отслеживать. По умолчанию — все карточные: Stripe, WooPayments, Braintree, Square, Authorize.Net, NMI и другие. Банковский перевод, чек и наложенный платёж не отслеживаются, пока вы их не отметите.
  2. Попытка. Когда WooCommerce принял форму и передаёт заказ шлюзу, щит добавляет попытку к счётчикам IP-адреса, сессии браузера (корзины) и e-mail плательщика. По умолчанию: 10 попыток с адреса и 6 с сессии или e-mail за 60 минут.
  3. Отказ. Шлюз отклонил оплату — щит учитывает отказ (по умолчанию лимит 5 на адрес и 3 на сессию или e-mail) и ставит паузу: 10 секунд после первого отказа, дальше 20, 40 и до 5 минут. Человек, который вводит карту второй раз, паузы не замечает; скрипт со списком карт замедляется до ползания.
  4. Поздние отказы. Если шлюз сообщает об отказе позже — вебхуком или после неудачного 3-D Secure, — заказ переходит в «Не удался», и щит учитывает это один раз, даже если статус ставится дважды. Успешный 3-D Secure отказом не считается.
  5. Одновременные оплаты. Скрипт может отправить 20 карт параллельно — тогда все 20 дошли бы до шлюза раньше, чем первый отказ попадёт в счётчик. Поэтому щит пропускает не больше 3 оплат за 10 секунд с одного адреса, браузера или аккаунта; счётчик атомарный (Redis, APCu или один запрос к таблице). Лимит можно изменить или отключить фильтром catcode_cts_burst.
  6. Отказ щита. Клиент, исчерпавший лимит, получает отказ на заданное время (по умолчанию 60 минут) с нейтральным сообщением. Покупатели, которые уже платили, менеджеры магазина и администраторы не ограничиваются никогда; адреса, сети, e-mail и домены из белого списка — тоже.
  7. «Добавить способ оплаты». Любимый путь тестировщиков, которые регистрируют тысячи бесплатных аккаунтов. Щит ограничивает его отдельно (по умолчанию 5 карт и 3 отказа с адреса или аккаунта) — и в форме WooCommerce, и в AJAX-проверках карт Stripe и WooPayments.
  8. Режим наблюдения. Не уверены, что лимиты подходят вашему магазину? Включите «Наблюдение» на несколько дней: щит только записывает, кому отказал бы, и никому не отказывает.

Pro. Тестировщики гоняют сгенерированные номера одной банковской серии через много адресов — Pro считает отказы на BIN карты (первые шесть цифр) для всех посетителей вместе. Это работает для шлюзов, которые передают номер карты или BIN на сайт: плагины Authorize.Net и NMI, стандартная форма карты WooCommerce. Stripe, Braintree и Square превращают карту в токен ещё в браузере, номер на сайт не попадает — там работают другие лимиты. Ещё Pro считает отказы на сеть /24 (IPv4) или /48 (IPv6) для атак с соседних адресов. Во время волны отказов (по умолчанию 20 отклонённых оплат картой за 15 минут по всему магазину) Pro включает блокировку на 60 минут: более жёсткие лимиты для всех, кроме доверенных покупателей, по желанию гости не могут платить картой, а вам приходит письмо. Блокировку можно включить и завершить вручную. Для «Добавить способ оплаты» есть минимальный возраст аккаунта (по умолчанию 24 часа) или правило «только аккаунты с оплаченным заказом». Списки блокировки — IP-адреса и сети, e-mail и почтовые домены, BIN.

Что под капотом

  • Точки проверки: woocommerce_checkout_process для классического чекаута, проверка запроса Store API до выполнения для блочного (ответ — обычная ошибка оплаты), woocommerce_before_pay_action для «Оплатить заказ», woocommerce_add_payment_method_form_is_valid и AJAX-действия Stripe и WooPayments для «Добавить способ оплаты».
  • Результат оплаты берётся из ответа WooCommerce и шлюза: успех, отказ, 3-D Secure. Поздний отказ — через переход заказа в «Не удался», один раз на заказ.
  • Скользящее окно: лимит читает текущий период плюс долю предыдущего, которая ещё перекрывается, поэтому две быстрые серии по обе стороны полного часа не удваивают лимит.
  • Атомарные счётчики: INCR в Redis, apcu_inc или один INSERT … ON DUPLICATE KEY UPDATE — параллельные запросы не читают устаревшие значения.
  • Адрес посетителя: CF-Connecting-IP принимается только из официальных сетей Cloudflare, чтобы скрипт не подставил чужой адрес заголовком.
  • Данные: ничего не уходит за пределы вашего сервера, бесплатная версия не делает внешних запросов. Номер карты не хранится нигде.
  • Удаление плагина убирает его таблицы, настройки и задания крона.

Как установить

  1. Плагины → Добавить новый → Загрузить плагин: выберите catcode-card-testing-shield-for-woocommerce-free-1.0.0.zip и активируйте (WooCommerce должен быть активен).
  2. Откройте WooCommerce → Card Testing Shield → «Правила». Лимиты по умолчанию подходят большинству магазинов; если сомневаетесь — включите «Наблюдение» на несколько дней и посмотрите журнал.
  3. Если сайт за Cloudflare или другим прокси — проверьте во вкладке «Обзор» строку «Ваш адрес, как его видит щит» и при необходимости выберите «Адрес посетителя» в «Правила → Сервер».
  4. Добавьте в белый список адреса своего офиса или колл-центра, если принимаете оплаты по телефону.
  5. Для Pro: вставьте лицензионный ключ из письма после оплаты или нажмите «Попробовать Pro 7 дней» внизу вкладки «Правила».

Вопросы
о модуле

Не нашли ответ? Напишите в Telegram — ответим в течение рабочего дня.

@catcode_support Настройка, совместимость, активация
Что такое card testing и чем он вредит магазину?

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

Не заблокирует ли он настоящих покупателей?

По умолчанию разрешено 6 попыток и 3 отказа на сессию браузера и e-mail и 10 попыток и 5 отказов на IP-адрес в час — настоящему покупателю редко нужно больше двух-трёх. Покупателей, которые уже платили, щит не ограничивает вообще. Если кому-то всё же отказали — найдите его во вкладке «Обзор» по IP или e-mail и разблокируйте.

Это заменяет CAPTCHA или антифрод платёжного шлюза?

Нет, работает вместе с ними. CAPTCHA решают фермы, и она не защищает «Оплатить заказ» и сохранённые карты. Антифрод шлюза видит только попытки, которые уже дошли до шлюза и стоят вам комиссию. Щит останавливает повторные попытки ещё на вашем сервере.

А встроенный в WooCommerce «Rate limit Checkout»?

Эта функция (Настройки → Дополнительно → Функции) пропускает 3 запроса блочного чекаута в минуту с адреса или аккаунта, независимо от результата. Классический чекаут, «Оплатить заказ» и сохранённые карты она не покрывает, на отказы и e-mail не смотрит. Можно держать включёнными оба.

Магазин за Cloudflare — щит видит настоящий адрес покупателя?

Да: адрес берётся из CF-Connecting-IP автоматически, но только для запросов, которые действительно пришли из сетей Cloudflare. За другим прокси или балансировщиком выберите его заголовок в «Правила → Сервер». Во вкладке «Обзор» видно, какой адрес щит видит для вас.

Хранит ли плагин данные карт?

Нет. В журнале — адрес, e-mail, способ оплаты и заказ, никогда номер карты. Pro для шлюзов, которые передают номер на сайт, читает в памяти только первые шесть цифр (BIN) и хранит только их. Бесплатная версия не делает никаких внешних запросов.

Не тот вариант, что искали?

Делаем кастомные модули под WordPress, WooCommerce, OpenCart и Shopify. Расскажите о задаче — подготовим оценку.

Заказать кастомный модуль