Мошенничество в интернет-магазине: фейковые заказы и как их остановить
Практика3 минРедакция Innovialabs
Коротко
Большинство атак на магазин — это повторяющиеся паттерны, поэтому их останавливают лимиты частоты, velocity-правила, подтверждение телефона и очередь ручной проверки для подозрительных заказов.
Как остановить фейковые заказы
Мошенничество в интернет-магазине почти всегда оставляет паттерн: много попыток за короткое время, одинаковые устройства, странные адреса, свежие аккаунты. Защита строится слоями:
- Rate limits на чекаут, логин и применение промокодов.
- Velocity-правила — ограничения по количеству действий на карту, телефон, IP, устройство и адрес.
- Подтверждение телефона через SMS или Telegram для рискованных заказов.
- Очередь ручной проверки для заказов, которые набрали подозрительный скоринг.
- 3-D Secure и антифрод платёжного провайдера — включайте их, а не дублируйте.
Цель — не поймать всех, а сделать атаку дорогой и медленной, не мешая честным покупателям.
Типовые схемы мошенничества
| Схема | Как выглядит | Чем вредит |
|---|---|---|
| Card testing | Сотни мелких оплат с разными номерами карт | Комиссии, чарджбэки, блокировка мерчанта |
| Бот-заказы | Массовые заказы на дефицитный товар | Остатки уходят перекупщикам |
| Отказ от наложенного платежа | Заказы с оплатой при получении, которые никто не забирает | Расходы на доставку и возврат |
| Злоупотребление промокодами | Новые аккаунты ради скидки «на первый заказ» | Скидки уходят не тем клиентам |
| Account takeover | Вход в чужой аккаунт по утёкшему паролю | Покупки бонусами и сохранённой картой |
Card testing заслуживает отдельного внимания: мошенник проверяет украденные карты на маленьких суммах. Признаки — всплеск неуспешных авторизаций, одинаковый товар, повторяющиеся имена и email вида случайных строк.
Практичные меры защиты
Лимиты и velocity-правила
Считайте события в скользящем окне и блокируйте или усложняйте шаг при превышении:
- не больше N попыток оплаты с одного IP или устройства за 10 минут;
- не больше N разных карт на один аккаунт за сутки;
- не больше N заказов с оплатой при получении на один телефон без выкупа;
- один «первый заказ» на телефон, а не на email.
Удобно хранить счётчики в Redis с TTL:
key = f"pay_attempts:{ip}"
count = redis.incr(key)
if count == 1:
redis.expire(key, 600)
if count > 5:
require_captcha_or_block()
Подтверждение телефона
Для оплаты при получении и для первого заказа подтверждение номера резко снижает долю пустых заказов. Привязывайте промокоды и историю выкупа к подтверждённому телефону — его сложнее сменить, чем email.
Скоринг и ручная проверка
Не нужно сразу строить ML. Начните с простого балла риска:
- новый аккаунт — плюс баллы;
- адрес доставки не совпадает со страной карты — плюс;
- несколько неудачных оплат перед успешной — плюс;
- заказ дорогого товара в большом количестве — плюс.
Заказы выше порога попадают в очередь ручной проверки: оператор звонит клиенту или запрашивает подтверждение. Важно, чтобы у очереди был SLA, иначе честные клиенты ждут.
Защита аккаунтов
- Ограничение попыток входа и уведомления о входе с нового устройства.
- Повторный ввод пароля или код при смене адреса, телефона и при оплате бонусами.
- Проверка паролей по базам утечек при регистрации.
Частые ошибки
- Блокировать по одному признаку. IP из другой страны может быть VPN честного клиента. Комбинируйте сигналы.
- Не смотреть на неуспешные оплаты. Card testing виден именно в отказах, а не в успешных заказах.
- Хранить правила в коде. Пороги приходится часто менять — выносите их в конфиг или админку.
- Не логировать решения. Без логов нельзя понять, почему заказ отклонили, и разобрать жалобу.
- Наказывать всех. Капча и SMS на каждом шаге снижают конверсию; включайте трение только при риске.
Как выбрать уровень защиты
Начните с базового набора: лимиты на чекаут и логин, 3-D Secure, подтверждение телефона для оплаты при получении. Добавляйте скоринг и ручную проверку, когда видите потери в отчётах по чарджбэкам и невыкупам. Отдельные антифрод-сервисы имеют смысл при большом объёме и международных платежах.