CashoutGuard

Как блокировать фрод при регистрации, клике по офферу и выводе средств

Посчитать скоринг фрода — только половина дела. Деньги спасает то, что ваш сайт действует на основе ответа. В этом руководстве — четыре точки, где нужно действовать, что делать в каждой из них и те несколько строк кода, которые для этого нужны.

Четыре точки, где нужно действовать

Фрод на сайте заработка каждый раз идёт по одному пути: открыть аккаунты, выполнить офферы, собрать конверсии, вывести деньги. Каждый шаг — шанс его остановить, и каждый обходится дешевле следующего.

  1. Регистрация. Отказ фермерскому аккаунту на этом этапе ничего не стоит. Он никогда не заработает, не кликнет и не дойдёт до ваших рекламодателей.
  2. Клик по офферу. Если аккаунт уже помечен, не открывайте оффер. Фрод не доходит ни до офферволла, ни до рекламодателя, поэтому потом нечего отменять.
  3. Конверсия (postback). Начислите награду, но на удержании (hold). Баллы есть, но пользователь не может их потратить, а вы принимаете решение после проверки.
  4. Вывод средств. Последний момент, когда деньги ещё ваши. Удержите вывод и проверьте его перед выплатой.

Что делать с каждым ответом

CashoutGuard отвечает на каждое событие одним из решений — allow, review или block — и указывает причины. Вот разумная стартовая политика:

Гдеblockreviewallow
РегистрацияОтклонить аккаунт или оставить его приостановленнымПринять, следить за первым выводомПринять
Клик по офферуПоказать «оффер недоступен»Открыть офферОткрыть оффер
КонверсияНачислить на удержание, без зачисления на балансНачислить как обычно, пометить для проверки при выводеНачислить как обычно
Вывод средствУдержать, после проверки обычно отклонитьУдержать для быстрой проверкиВыплатить

Приостанавливайте аккаунт, а не удаляйте его. Если тревога оказалась ложной, одним кликом можно вернуть пользователя со всей его историей.

Код

Браузерный скрипт выдаёт каждому посетителю 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, совсем новый аккаунт или слишком быстро выполненный оффер. Два-три таких сигнала на одном аккаунте обычно и так дают скоринг для блокировки — в этом и смысл скоринга: один слабый сигнал редко решает исход, несколько сильных решают всегда.

Как выбрать пороги

У каждого сайта есть два числа: скоринг, начиная с которого событие уходит на проверку, и скоринг, начиная с которого оно блокируется. Значения по умолчанию подходят большинству сайтов заработка, но ваш трафик не такой, как у всех.

  1. Поработайте в shadow mode от трёх до семи дней, чтобы набрать реальный оценённый трафик.
  2. Откройте аккаунты, которые были бы заблокированы, и вручную проверьте двадцать из них. Если почти все — очевидный фрод, порог блокировки выбран верно или его даже можно немного снизить.
  3. Сделайте то же самое с двадцатью аккаунтами на проверке. Если большинство из них честные, поднимите порог проверки, чтобы ваша команда смотрела только действительно важные случаи.
  4. Повторяйте после крупных изменений: новый офферволл, новая страна или новый способ выплат меняют состав тех, кто к вам приходит.

Правила помогают там, где какой-то сигнал на вашем сайте важнее, чем на других. Сайт, который платит только в криптовалюте, может захотеть блокировать любой общий кошелёк; сайту с опросами важнее всего скорость. Правила меняют вес причины, не затрагивая ваш код.

Когда блокируют честного пользователя

Это случится. Семья с одним ноутбуком на всех, путешественник в гостиничном Wi-Fi или абонент мобильного оператора, который ротирует IP, — все они могут выглядеть необычно. Важно, как быстро вы сможете это исправить.

  • Сохраните аккаунт, приостановите его. Удаляя аккаунт, вы выбрасываете историю, которая нужна для решения.
  • Оставьте путь назад. Достаточно нейтрального сообщения со ссылкой на поддержку. Фермы редко пишут в поддержку; честные пользователи пишут.
  • После проверки добавьте в allowlist. Когда вы уверены, добавьте аккаунт в allowlist, чтобы те же сигналы не заблокировали его снова через неделю.
  • Быстро освобождайте удержанные деньги. Удержанную конверсию или вывод, которые оказались в порядке, нужно выплатить в тот же день. Именно это делает удержание приемлемым для честных пользователей.

План внедрения за одну неделю

ДеньШагЗачем
1Установите скрипт и отправляйте выводы и postback'и, сайт в shadow modeРеальный трафик оценивается без какого-либо риска
2-3Просмотрите выборку потенциальных блокировок и проверокСверьте пороги с вашими собственными пользователями
4Переключитесь в enforce и действуйте только на выводахЗащищает деньги с минимальным влиянием
5Удерживайте заблокированные конверсии в обработчике postbackБалансы помеченных аккаунтов перестают расти
6-7Отклоняйте заблокированные регистрации и не открывайте заблокированные офферыФермы останавливаются на входе и не доходят до ваших рекламодателей

Как измерить результат

Три числа покажут, работает ли блокировка. Смотрите на них еженедельно в течение первого месяца.

  • Доля отмен от ваших сетей. Доля конверсий, отменённых спустя недели, должна снижаться по мере того, как заблокированные аккаунты перестают зарабатывать.
  • Удержанные и освобождённые деньги. Если вы освобождаете большую часть удержанного, пороги слишком строгие. Если почти ничего не освобождаете, они, возможно, слишком мягкие.
  • Обращения в поддержку по поводу блокировок. Несколько в неделю — это нормально. Резкий рост обычно означает, что какой-то сигнал слишком силён для вашей аудитории.

Следующие шаги

Начните с вывода средств: это один вызов, и он напрямую защищает деньги. Затем добавьте postback, а после него — регистрацию и клик по офферу. В чек-листе по выводам описано, на что смотреть при проверке, а на странице тарифов доступен 14-дневный пробный период тарифа Growth.

Частые вопросы

Блокировать при регистрации или при выводе?

И там, и там, но по разным причинам. Регистрация останавливает фермы до того, как они начнут вам что-то стоить; вывод — последняя страховка для аккаунтов, которые поначалу выглядели чистыми.

Действительно ли помогает блокировка клика по офферу?

Да. Если оффер так и не открылся, офферволл не фиксирует установку, рекламодатель не получает фрод с вашего сайта, и через несколько недель нечего отменять.

Что, если CashoutGuard недоступен?

SDK работают по принципу fail-open: через две секунды они отвечают allow, и ваш сайт продолжает работать так, будто проверки нет.

Можно ли блокировать только при выводе, а остальное просто отслеживать?

Да. Ваш код сам решает, на какие ответы реагировать. Многие сайты начинают с удержания заблокированных выводов и лишь позже начинают отклонять регистрации.

Читайте также