Заказ за 1 цент: как магазин терял деньги
У владельца интернет-магазина на Drupal заказы проходили за 1 цент или вовсе без оплаты. Дыра сидела в самом оформлении покупки.
На днях разобрал историю из практики. Владелец небольшого интернет-магазина на Drupal позвонил с вопросом: почему выручка в системе есть, а на расчётном счёте заметно меньше? Оказалось, часть заказов в админке была помечена как оплаченная, хотя деньги не приходили. Ровно такая же схема сейчас всплыла в новостях: Drupal подтвердил, что критическую уязвимость в модуле Commerce Core уже используют в атаках.
Где была дыра
Простыми словами: покупку можно провести в обход проверки платежа. Злоумышленник оформляет заказ, а магазин считает, что он оплачен, хотя заплатили 1 цент или ничего. Товар уходит, деньги нет. Хуже всего то, что со стороны всё выглядит как обычные продажи, и заметить подвох можно только при сверке с банком.
Что это стоило
Бизнес отгружал товар месяцами и считал его проданным. Потери набежали в десятки тысяч рублей, а ещё несколько недель ушло на ручную сверку заказов с банковскими выписками. Это мелочь рядом с тем, что было бы, найди дыру кто-то более жадный.
Что я сделал
1. Обновил Commerce Core до исправленной версии: было окно для обхода оплаты, стало закрытое.
2. Настроил автоматическую сверку заказов с поступлениями: было ручное сравнение на несколько дней, стало ежедневное совпадение без участия человека.
3. Подключил уведомление владельцу в мессенджер, если заказ отмечен оплаченным без платёжной транзакции: было узнавание о проблеме постфактум, стало сигнал в день события.
Моя работа обошлась в несколько раз меньше, чем магазин уже потерял на таких заказах, и дешевле, чем потеря одного постоянного клиента. Урок простой: у интернет-магазина платёжный контур нужно сверять с банком автоматически, а обновления закрывать сразу, пока их не начали эксплуатировать.
А у вас продажи в учётной системе и поступления на счёт проверяются автоматически или всё ещё глазами?