Comment bloquer la fraude à l'inscription, au clic sur l'offre et au retrait
Scorer la fraude n'est que la moitié du travail. L'argent est sauvé quand votre site agit en fonction de la réponse. Ce guide montre les quatre endroits où agir, quoi faire à chacun et les quelques lignes de code nécessaires.
Les quatre endroits où agir
Sur un site de récompenses, la fraude suit toujours le même chemin : ouvrir des comptes, compléter des offres, empocher les conversions, retirer. Chaque étape est une occasion de l'arrêter, et chacune coûte moins cher que la suivante.
- Inscription. Refuser un compte de ferme à ce stade ne coûte rien. Il ne gagne jamais, ne clique jamais et n'atteint jamais vos annonceurs.
- Clic sur l'offre. Si le compte est déjà signalé, n'ouvrez pas l'offre. La fraude n'atteint jamais l'offerwall ni l'annonceur, il n'y a donc rien à annuler plus tard.
- Conversion (postback). Créditez la récompense, mais en attente. Les points existent, l'utilisateur ne peut pas les dépenser, et vous décidez après un coup d'œil.
- Retrait. Le dernier moment où l'argent est encore à vous. Mettez le retrait en attente et examinez-le avant de payer.
Que faire de chaque réponse
CashoutGuard répond à chaque événement par allow, review ou block, avec les raisons. Voici une politique de départ raisonnable :
| Où | block | review | allow |
|---|---|---|---|
| Inscription | Refuser le compte ou le laisser suspendu | Accepter, surveiller le premier retrait | Accepter |
| Clic sur l'offre | Afficher « offre indisponible » | Ouvrir l'offre | Ouvrir l'offre |
| Conversion | Créditer en attente, sans solde | Créditer normalement, signaler pour l'examen du retrait | Créditer normalement |
| Retrait | Mettre en attente, refuser en général après examen | Mettre en attente pour un examen rapide | Payer |
Suspendez le compte au lieu de le supprimer. Si c'était une fausse alerte, un clic suffit pour que l'utilisateur revienne avec son historique intact.
Le code
Le script navigateur attribue un request_id à chaque visiteur. Envoyez-le avec le formulaire à votre serveur, puis interrogez CashoutGuard depuis le serveur avec votre clé secrète. Les exemples utilisent le SDK PHP de la documentation ; les SDK Node.js et Python s'utilisent de la même façon.
Inscription
$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.']);
}Clic sur l'offre
$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));Conversion (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 spendableRetrait
$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();Rester prudent : mode shadow et fail-open
Deux réglages protègent les utilisateurs honnêtes pendant le déploiement.
- D'abord le mode shadow. Un nouveau site répond allow à tout, tout en enregistrant ce qu'il aurait fait. Faites tourner votre code en mode shadow pendant quelques jours, regardez les comptes qu'il aurait bloqués, puis passez le site en mode enforce. Votre code ne change pas.
- Fail-open. Le SDK attend au maximum deux secondes et répond allow si CashoutGuard est lent ou injoignable. Un problème réseau ne bloque jamais une inscription ni un paiement.
Quels signaux justifient un blocage
Toutes les raisons n'ont pas le même poids. Une bonne politique bloque sur des preuves difficiles à expliquer innocemment et se contente d'examiner le reste. Voici les signaux qui justifient le plus souvent un blocage à eux seuls :
- Une adresse de paiement déjà payée pour un autre compte. Un même e-mail PayPal ou wallet qui encaisse pour plusieurs comptes, c'est une seule personne.
- Un appareil partagé avec des comptes que vous avez déjà bloqués. Le même navigateur ou téléphone qui revient sous un nouveau nom, c'est le schéma classique d'une ferme.
- Un émulateur, une machine virtuelle ou un outil d'automatisation. Les vrais utilisateurs ne complètent pas d'offres depuis un navigateur headless ou un émulateur Android.
- Tor ou une IP de datacenter sur des offres géociblées. L'annonceur a payé pour un pays où l'utilisateur n'a jamais mis les pieds : la conversion sera annulée.
- Une adresse figurant sur votre propre liste noire. Chaque réseau confirmé vous fournit des appareils, des IP et des adresses qui ne devraient plus jamais rien gagner.
Les autres signaux sont plutôt des raisons de regarder que des raisons de bloquer : un VPN seul, un fuseau horaire qui ne correspond pas à l'IP, un compte tout neuf ou une offre complétée très vite. Deux ou trois d'entre eux réunis sur le même compte atteignent généralement de toute façon un score de blocage, et c'est tout l'intérêt du scoring : un signal faible décide rarement, plusieurs signaux forts décident toujours.
Choisir vos seuils
Chaque site a deux valeurs : le score à partir duquel un événement part en examen et celui à partir duquel il est bloqué. Les valeurs par défaut conviennent à la plupart des sites de récompenses, mais votre trafic n'est pas celui de tout le monde.
- Restez en mode shadow trois à sept jours pour disposer de vrai trafic scoré.
- Ouvrez les comptes qui auraient été bloqués et vérifiez-en vingt à la main. Si presque tous sont clairement frauduleux, le seuil de blocage est bon, voire pourrait descendre un peu.
- Faites de même avec vingt comptes en examen. Si la plupart sont honnêtes, relevez le seuil d'examen pour que votre équipe ne regarde que les cas qui comptent.
- Recommencez après tout changement important : un nouvel offerwall, un nouveau pays ou un nouveau moyen de paiement change le profil de ceux qui arrivent.
Les règles sont utiles quand un signal compte davantage sur votre site qu'ailleurs. Un site qui ne paie qu'en crypto voudra peut-être bloquer chaque wallet partagé ; un site de sondages s'intéressera surtout à la vitesse. Les règles modifient le poids d'une raison sans toucher à votre code.
Quand un utilisateur honnête est bloqué
Cela arrivera. Une famille qui partage un ordinateur portable, un voyageur sur le wifi d'un hôtel ou un utilisateur derrière un opérateur mobile qui fait tourner les IP peuvent tous paraître inhabituels. Ce qui compte, c'est la rapidité avec laquelle vous pouvez corriger le tir.
- Gardez le compte, suspendez-le. Le supprimer, c'est jeter l'historique dont vous avez besoin pour décider.
- Prévoyez une porte de sortie. Un message neutre avec un lien vers le support suffit. Les fermes écrivent rarement ; les utilisateurs honnêtes, si.
- Ajoutez en liste blanche après vérification. Une fois sûr de vous, mettez le compte en liste blanche pour que les mêmes signaux ne le bloquent pas à nouveau la semaine suivante.
- Libérez vite l'argent retenu. Une conversion ou un retrait mis en attente qui s'avère correct doit être payé le jour même. C'est ce qui rend la mise en attente acceptable pour les utilisateurs honnêtes.
Un plan de déploiement sur une semaine
| Jour | Étape | Pourquoi |
|---|---|---|
| 1 | Installer le script et envoyer retraits et postbacks, site en mode shadow | Le vrai trafic est scoré sans aucun risque |
| 2-3 | Examiner un échantillon des blocages et examens potentiels | Confronter les seuils à vos propres utilisateurs |
| 4 | Passer en mode enforce et agir uniquement sur les retraits | Protège l'argent avec un impact minimal |
| 5 | Mettre en attente les conversions bloquées dans le gestionnaire de postback | Les soldes cessent de grossir sur les comptes signalés |
| 6-7 | Refuser les inscriptions bloquées et garder fermées les offres bloquées | Les fermes sont arrêtées à l'entrée et n'atteignent jamais vos annonceurs |
Mesurer le résultat
Trois chiffres vous disent si le blocage fonctionne. Suivez-les chaque semaine pendant le premier mois.
- Le taux d'annulation de vos réseaux. La part de conversions annulées des semaines plus tard doit baisser à mesure que les comptes bloqués cessent de gagner.
- L'argent retenu et l'argent libéré. Si vous libérez l'essentiel de ce que vous retenez, vos seuils sont trop stricts. Si vous ne libérez presque jamais rien, ils sont peut-être trop laxistes.
- Les tickets de support liés aux blocages. Quelques-uns par semaine, c'est normal. Un bond soudain signifie généralement qu'un signal est trop fort pour votre audience.
Prochaines étapes
Commencez par le retrait : c'est un seul appel, et il protège directement l'argent. Ajoutez ensuite le postback, puis l'inscription et le clic sur l'offre. La checklist des retraits détaille ce qu'il faut regarder pendant l'examen, et la page tarifs inclut un essai Growth de 14 jours.