IP tracking a fraud prevention

Výchozí chování — pouze REMOTE_ADDR

Plugin defaultně získává IP adresu klienta výhradně z $_SERVER['REMOTE_ADDR']. Důvod: ostatní hlavičky (X-Forwarded-For, Client-IP, CF-Connecting-IP) lze podvrhnout standalone HTTP requestem, což by umožnilo útočníkovi obejít fraud detection.

Cloudflare a load balancery

Pokud běžíte za Cloudflare nebo load balancerem, REMOTE_ADDR je IP edge nodu, ne klienta. Pro získání skutečné client IP zapněte:

wp option update affinite_wp_affiliate_trust_proxy_headers yes

Plugin pak preferuje (v tomto pořadí): HTTP_CF_CONNECTING_IPHTTP_X_FORWARDED_FORHTTP_CLIENT_IPREMOTE_ADDR.

Customizace pořadí přes filter

Filtrem můžete omezit, které hlavičky se mají zkoumat. Užitečné pokud chcete trust pouze Cloudflare:

add_filter('affinite_trusted_proxy_headers', function() {
    return ['HTTP_CF_CONNECTING_IP']; // Jen Cloudflare
});

X-Forwarded-For parsing

Hlavička X-Forwarded-For může obsahovat chain IP: client_ip, proxy1_ip, proxy2_ip. Plugin správně extrahuje first entry (klient).

Visitor ID generation

Pro deduplikaci kliknutí (návštěvník klikne 5× na stejný odkaz) plugin generuje visitor_id:

visitor_id = md5(IP + User-Agent + timestamp)

Stejný visitor v krátkém okně generuje stejný hash — admin v reports vidí unique visitors místo total clicks.

Fraud signály v datech

Plugin neprovádí automatickou fraud detection, ale ukládá signály pro manuální vyhodnocení:

  • Vysoký click count z jedné IP — možný bot nebo self-promotion.
  • Konverze hned po prvním kliku — možný self-affiliation.
  • Chybějící referrer — direct traffic, lze validovat proti reportovaným kampaním.
  • Stejný customer_email napříč konverzemi různých affiliate — možná fraudulentní spolupráce.
  • UTM parametry chybí kdy by měly být (kampaň byla deklarována s UTM).

Doporučená praxe

  • Pravidelně review top click sources (IP, referrer) — neobvykle vysoký objem znamená vyšetřování.
  • Manuální schvalování velkých provizí (nad threshold) i při zapnutém auto-approve.
  • Suspend při podezření — zachová audit trail, lze obnovit.
  • Reject + IP block na úrovni serveru pro potvrzený fraud.