Как блокировать фрод при регистрации, клике по офферу и выводе средств
Посчитать скоринг фрода — только половина дела. Деньги спасает то, что ваш сайт действует на основе ответа. В этом руководстве — четыре точки, где нужно действовать, что делать в каждой из них и те несколько строк кода, которые для этого нужны.
Четыре точки, где нужно действовать
Фрод на сайте заработка каждый раз идёт по одному пути: открыть аккаунты, выполнить офферы, собрать конверсии, вывести деньги. Каждый шаг — шанс его остановить, и каждый обходится дешевле следующего.
- Регистрация. Отказ фермерскому аккаунту на этом этапе ничего не стоит. Он никогда не заработает, не кликнет и не дойдёт до ваших рекламодателей.
- Клик по офферу. Если аккаунт уже помечен, не открывайте оффер. Фрод не доходит ни до офферволла, ни до рекламодателя, поэтому потом нечего отменять.
- Конверсия (postback). Начислите награду, но на удержании (hold). Баллы есть, но пользователь не может их потратить, а вы принимаете решение после проверки.
- Вывод средств. Последний момент, когда деньги ещё ваши. Удержите вывод и проверьте его перед выплатой.
Что делать с каждым ответом
CashoutGuard отвечает на каждое событие одним из решений — allow, review или block — и указывает причины. Вот разумная стартовая политика:
| Где | block | review | allow |
|---|---|---|---|
| Регистрация | Отклонить аккаунт или оставить его приостановленным | Принять, следить за первым выводом | Принять |
| Клик по офферу | Показать «оффер недоступен» | Открыть оффер | Открыть оффер |
| Конверсия | Начислить на удержание, без зачисления на баланс | Начислить как обычно, пометить для проверки при выводе | Начислить как обычно |
| Вывод средств | Удержать, после проверки обычно отклонить | Удержать для быстрой проверки | Выплатить |
Приостанавливайте аккаунт, а не удаляйте его. Если тревога оказалась ложной, одним кликом можно вернуть пользователя со всей его историей.
Код
Браузерный скрипт выдаёт каждому посетителю request_id. Отправьте его вместе с формой на свой сервер, а затем запросите CashoutGuard с сервера, используя секретный ключ. В примерах используется PHP SDK из документации; SDK для Node.js и Python выглядят так же.
Регистрация
$cg = new \CashoutGuard\Client(getenv('CASHOUTGUARD_SECRET'));
$user = createUser($request); // your own signup
$r = $cg->evaluate([
'event' => 'signup',
'account_id' => (string) $user->id,
'request_id' => $request->input('cg_request_id'),
'ip' => $request->ip(),
'email' => $user->email,
]);
if ($r->isBlocked()) {
$user->suspend(); // keep it, so a false alarm is one click away
return back()->withErrors(['email' => 'We could not create your account.']);
}Клик по офферу
$r = $cg->evaluate(['event' => 'offer_click', 'account_id' => (string) $user->id,
'request_id' => $request->input('cg_request_id'), 'offer_id' => $offer->id, 'click_id' => $clickId]);
if ($r->isBlocked()) {
return response()->view('offer-unavailable', [], 403);
}
return redirect()->away($offer->trackingUrl($user, $clickId));Конверсия (postback)
// Ask BEFORE crediting, so a blocked conversion never touches the balance.
$r = $cg->evaluate(['event' => 'conversion', 'account_id' => (string) $userId,
'offer_id' => $offerId, 'transaction_id' => $transId, 'amount' => $payoutUsd, 'currency' => 'USD']);
$status = $r->isBlocked() ? 'hold' : 'approved';
creditReward($userId, $points, $status); // 'hold' = recorded, not spendableВывод средств
$r = $cg->evaluate(['event' => 'cashout', 'account_id' => (string) $user->id,
'request_id' => $request->input('cg_request_id'), 'amount' => $usd, 'currency' => 'USD',
'payout_method' => $method, 'payout_address' => $address]);
$withdrawal->status = $r->isBlocked() ? 'hold' : ($r->needsReview() ? 'review' : 'pending');
$withdrawal->save();Безопасный запуск: shadow mode и fail-open
Две настройки защищают честных пользователей, пока вы внедряете проверки.
- Сначала shadow mode. Новый сайт отвечает allow на всё, но при этом записывает, что сделал бы. Погоняйте свой код в shadow mode несколько дней, посмотрите на аккаунты, которые были бы заблокированы, и затем переключите сайт в режим enforce. Ваш код при этом не меняется.
- Fail-open. SDK ждёт не более двух секунд и отвечает allow, если CashoutGuard отвечает медленно или недоступен. Сетевые проблемы никогда не заблокируют регистрацию или выплату.
Какие сигналы заслуживают блокировки
Не все причины одинаково весомы. Хорошая политика блокирует на основании улик, которым трудно найти невинное объяснение, а всё остальное отправляет на проверку. Вот сигналы, которые чаще всего оправдывают блокировку сами по себе:
- Реквизиты для выплат, на которые уже платили за другой аккаунт. Один email PayPal или кошелёк, получающий деньги за несколько аккаунтов, — это один человек.
- Устройство, общее с уже заблокированными аккаунтами. Тот же браузер или телефон, вернувшийся под новым именем, — классический паттерн фермы.
- Эмулятор, виртуальная машина или инструмент автоматизации. Реальные пользователи не выполняют офферы из headless-браузера или Android-эмулятора.
- Tor или IP дата-центра на гео-таргетированных офферах. Рекламодатель заплатил за страну, в которой пользователь никогда не был, поэтому конверсию отменят.
- Адрес из вашего собственного блоклиста. Каждая подтверждённая сеть даёт вам устройства, IP и адреса, которые больше никогда не должны зарабатывать.
Другие сигналы лучше использовать как повод присмотреться, а не как повод блокировать: VPN сам по себе, часовой пояс, не совпадающий с IP, совсем новый аккаунт или слишком быстро выполненный оффер. Два-три таких сигнала на одном аккаунте обычно и так дают скоринг для блокировки — в этом и смысл скоринга: один слабый сигнал редко решает исход, несколько сильных решают всегда.
Как выбрать пороги
У каждого сайта есть два числа: скоринг, начиная с которого событие уходит на проверку, и скоринг, начиная с которого оно блокируется. Значения по умолчанию подходят большинству сайтов заработка, но ваш трафик не такой, как у всех.
- Поработайте в shadow mode от трёх до семи дней, чтобы набрать реальный оценённый трафик.
- Откройте аккаунты, которые были бы заблокированы, и вручную проверьте двадцать из них. Если почти все — очевидный фрод, порог блокировки выбран верно или его даже можно немного снизить.
- Сделайте то же самое с двадцатью аккаунтами на проверке. Если большинство из них честные, поднимите порог проверки, чтобы ваша команда смотрела только действительно важные случаи.
- Повторяйте после крупных изменений: новый офферволл, новая страна или новый способ выплат меняют состав тех, кто к вам приходит.
Правила помогают там, где какой-то сигнал на вашем сайте важнее, чем на других. Сайт, который платит только в криптовалюте, может захотеть блокировать любой общий кошелёк; сайту с опросами важнее всего скорость. Правила меняют вес причины, не затрагивая ваш код.
Когда блокируют честного пользователя
Это случится. Семья с одним ноутбуком на всех, путешественник в гостиничном Wi-Fi или абонент мобильного оператора, который ротирует IP, — все они могут выглядеть необычно. Важно, как быстро вы сможете это исправить.
- Сохраните аккаунт, приостановите его. Удаляя аккаунт, вы выбрасываете историю, которая нужна для решения.
- Оставьте путь назад. Достаточно нейтрального сообщения со ссылкой на поддержку. Фермы редко пишут в поддержку; честные пользователи пишут.
- После проверки добавьте в allowlist. Когда вы уверены, добавьте аккаунт в allowlist, чтобы те же сигналы не заблокировали его снова через неделю.
- Быстро освобождайте удержанные деньги. Удержанную конверсию или вывод, которые оказались в порядке, нужно выплатить в тот же день. Именно это делает удержание приемлемым для честных пользователей.
План внедрения за одну неделю
| День | Шаг | Зачем |
|---|---|---|
| 1 | Установите скрипт и отправляйте выводы и postback'и, сайт в shadow mode | Реальный трафик оценивается без какого-либо риска |
| 2-3 | Просмотрите выборку потенциальных блокировок и проверок | Сверьте пороги с вашими собственными пользователями |
| 4 | Переключитесь в enforce и действуйте только на выводах | Защищает деньги с минимальным влиянием |
| 5 | Удерживайте заблокированные конверсии в обработчике postback | Балансы помеченных аккаунтов перестают расти |
| 6-7 | Отклоняйте заблокированные регистрации и не открывайте заблокированные офферы | Фермы останавливаются на входе и не доходят до ваших рекламодателей |
Как измерить результат
Три числа покажут, работает ли блокировка. Смотрите на них еженедельно в течение первого месяца.
- Доля отмен от ваших сетей. Доля конверсий, отменённых спустя недели, должна снижаться по мере того, как заблокированные аккаунты перестают зарабатывать.
- Удержанные и освобождённые деньги. Если вы освобождаете большую часть удержанного, пороги слишком строгие. Если почти ничего не освобождаете, они, возможно, слишком мягкие.
- Обращения в поддержку по поводу блокировок. Несколько в неделю — это нормально. Резкий рост обычно означает, что какой-то сигнал слишком силён для вашей аудитории.
Следующие шаги
Начните с вывода средств: это один вызов, и он напрямую защищает деньги. Затем добавьте postback, а после него — регистрацию и клик по офферу. В чек-листе по выводам описано, на что смотреть при проверке, а на странице тарифов доступен 14-дневный пробный период тарифа Growth.