Torna al blog
Engineering

Costruire una pipeline di rilevamento frodi

Josselin Liebe
Josselin Liebe

Un singolo segnale sospetto raramente racconta la storia completa. Un'email potrebbe sembrare a posto da sola, ma abbinata a un IP di un datacenter e un dominio registrato da poco, il quadro cambia rapidamente. Combinare più API di Veille in una pipeline ti offre una visione composita del rischio per ogni registrazione.

Panoramica dell'architettura

Nella sua forma più semplice: valida l'email (/v1/intelligence/email), controlla l'età del dominio (/v1/intelligence/domain), e valuta l'IP (/v1/intelligence/ip). Tre chiamate, tre segnali, un punteggio composito.

Integrazione rapida

Python

import requests

API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.veille.io/v1"


def score_signup(email: str, ip: str) -> dict:
    headers = {"x-api-key": API_KEY}

    email_data = requests.get(
        f"{BASE_URL}/intelligence/email", params={"query": email}, headers=headers
    ).json()

    domain_data = requests.get(
        f"{BASE_URL}/intelligence/domain", params={"query": email_data["domain"]}, headers=headers
    ).json()

    ip_data = requests.get(
        f"{BASE_URL}/intelligence/ip", params={"query": ip}, headers=headers
    ).json()

    age = min(domain_data.get("domain_age_days", 365), 365)
    domain_risk = ((365 - age) / 365) * 100

    composite = (
        email_data["risk_score"] * 0.40
        + domain_risk * 0.35
        + ip_data["threat_score"] * 0.25
    )

    return {
        "composite_score": round(composite),
        "disposable_email": email_data["disposable"],
        "vpn_or_proxy": ip_data["is_vpn"] or ip_data["is_proxy"],
        "domain_age_days": domain_data.get("domain_age_days"),
    }

TypeScript

const API_KEY = "YOUR_API_KEY";
const BASE_URL = "https://api.veille.io/v1";
const headers = { "x-api-key": API_KEY };

async function scoreSignup(email: string, ip: string) {
  const [emailResponse, ipResponse] = await Promise.all([
    fetch(`${BASE_URL}/intelligence/email?query=${email}`, { headers }),
    fetch(`${BASE_URL}/intelligence/ip?query=${ip}`, { headers }),
  ]);
  const [emailData, ipData] = await Promise.all([
    emailResponse.json(),
    ipResponse.json(),
  ]);

  const domainResponse = await fetch(
    `${BASE_URL}/intelligence/domain?query=${emailData.domain}`,
    { headers }
  );
  const domainData = await domainResponse.json();

  const age = Math.min(domainData.domain_age_days ?? 365, 365);
  const domainRisk = ((365 - age) / 365) * 100;

  return {
    compositeScore: Math.round(
      emailData.risk_score * 0.4 + domainRisk * 0.35 + ipData.threat_score * 0.25
    ),
    disposableEmail: emailData.disposable,
    vpnOrProxy: ipData.is_vpn || ipData.is_proxy,
    domainAgeDays: domainData.domain_age_days,
  };
}

Pesi raccomandati

Segnale Peso Perché
Punteggio di rischio email 40% Le email usa e getta/di ruolo sono l'indicatore di frode più forte
Rischio età dominio 35% I domini appena registrati correlano fortemente con la frode
Punteggio di minaccia IP 25% Le VPN sono usate anche da utenti legittimi attenti alla privacy

5 casi d'uso

  1. Registrazione utente - calcola un punteggio composito alla registrazione e rifiuta automaticamente i valori sopra una soglia.
  2. Verifica al checkout - esegui la pipeline prima di elaborare un pagamento per individuare identità sintetiche.
  3. Onboarding venditori marketplace - seleziona i nuovi merchant combinando segnali di email, dominio e IP.
  4. Moderazione dei contenuti - dai priorità alla revisione dei post provenienti da account ad alto rischio.
  5. Sicurezza dei webhook - valida l'IP di origine e il dominio dei webhook in arrivo prima di elaborarli.

Articoli correlati