Stoppen Sie Anmeldebetrug mit 3 API-Prüfungen, kein Captcha erforderlich
Captchas schaden der Konvertierung und Bots lösen sie trotzdem. Bewerten Sie jede Anmeldung mit VPN-, Einweg-E-Mail- und IP-Blocklist-Checks in weniger als 120 ms und fordern Sie nur die besten 5 % heraus.
Bots sind günstiger als Ihr Captcha-Budget. Eine kommerzielle Lösungsfarm löscht reCAPTCHA v2 für etwa 1 US-Dollar pro Tausend, sodass ein Scraper, der 50.000 Wegwerfkonten haben möchte, weniger für Captchas als für den VPS zum Ausführen des Skripts ausgibt. Unterdessen fallen Ihre echten Benutzer mit einer Quote von 3 bis 15 % vom Puzzle ab.
Ein besserer Zaun ist eine Punktzahl. Drei API-Aufrufe geben Ihnen genügend Signal, um 95 % der Anmeldungen reibungslos durchzulassen und den verbleibenden Teil herauszufordern oder zu blockieren. Gesamtlatenz unter 120 ms beim P99.
Drei Signale, drei Endpunkte
Jede Anmeldung hat eine IP und eine E-Mail. Das reicht aus, um drei eng gefasste Fragen zu stellen.
Handelt es sich bei der IP um ein VPN, einen Tor-Exit oder ein Rechenzentrum?
Echte Verbraucheranmeldungen haben selten ihren Ursprung in einem AWS CIDR-Block. Ein Tor-Exit-Knoten meldet sich fast nie für eine kostenlose Testversion Ihres SaaS an. Der /v1/vpn-detect Der Endpunkt überprüft alle drei.
{
"ip": "34.102.55.10",
"is_vpn": true,
"is_tor": false,
"is_datacenter": true,
"provider": "Google Cloud",
"risk_score": 60
}
Verwendet die E-Mail eine Wegwerfdomain?
Einweganbieter (Mailinator, Guerrillamail, Tempmail) rotieren Posteingänge innerhalb von Minuten. Wenn eine Anmeldung auf eine verfügbare Domain trifft, hat der Benutzer nicht die Absicht, Folgemaßnahmen zu erhalten. /v1/disposable-email/check Kennzeichnet über 700 bekannte Anbieter sowie heuristische Muster.
{
"email": "user@mailinator.com",
"domain": "mailinator.com",
"is_disposable": true,
"is_free": false,
"provider": "Mailinator"
}
Befindet sich die IP in einem Bogon-Bereich oder auf einer Reputationsliste?
Bogon-IPs sollten Ihren Server niemals über das offene Internet erreichen; Sie weisen auf einen gefälschten Header oder einen defekten Proxy hin. Verdächtiges Reverse-DNS (Hostnamen mit „Proxy“, „Tor“, „Spam“) ist ein weiterer billiger Hinweis. /v1/ip-blocklist/check Gibt eine Risikostufe plus Aufschlüsselung pro Scheck zurück.
{
"ip": "185.220.101.5",
"is_private": false,
"is_bogon": false,
"reverse_dns": "tor-exit-1.example.org",
"risk_level": "high"
}
Gewicht und Punktzahl in einer Funktion
Rufen Sie alle drei gleichzeitig auf, addieren Sie gewichtete Punkte, legen Sie den Wert auf 100 fest und treffen Sie ein Urteil. Die Schwellenwerte können pro Produkt angepasst werden. Beginnen Sie mit 20 und 70 als Herausforderung und Blockschnitte.
// signup-score.ts
type Verdict = 'allow' | 'challenge' | 'block';
export async function scoreSignup(input: {
ip: string;
email: string;
}): Promise<{ score: number; verdict: Verdict; signals: Record<string, unknown> }> {
const [vpn, email, blocklist] = await Promise.all([
fetch('https://api.botoi.com/v1/vpn-detect', postJson({ ip: input.ip })).then(r => r.json()),
fetch('https://api.botoi.com/v1/disposable-email/check', postJson({ email: input.email })).then(r => r.json()),
fetch('https://api.botoi.com/v1/ip-blocklist/check', postJson({ ip: input.ip })).then(r => r.json()),
]);
let score = 0;
if (vpn.is_tor) score += 80;
else if (vpn.is_datacenter) score += 50;
else if (vpn.is_vpn) score += 35;
if (email.is_disposable) score += 60;
else if (email.is_free) score += 10;
if (blocklist.risk_level === 'high') score += 40;
else if (blocklist.risk_level === 'medium') score += 20;
const verdict: Verdict = score >= 70 ? 'block' : score >= 20 ? 'challenge' : 'allow';
return { score: Math.min(score, 100), verdict, signals: { vpn, email, blocklist } };
}
function postJson(body: unknown): RequestInit {
return {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: \`Bearer \${process.env.BOTOI_API_KEY}\`,
},
body: JSON.stringify(body),
};
}
Ein paar Anmerkungen zu den Gewichten. Tor ist ein starkes Signal; Allein 80 Punkte bringen die Anfrage in das Blockband. IP-Adressen von Rechenzentren fangen viel Bot-Traffic, aber auch legitime Always-on-VPN-Benutzer ab, so dass sie mit 50 Punkten herausgefordert und nicht blockiert werden. Wegwerf-E-Mails erhalten 60 Punkte, da sich echte Benutzer fast nie für Mailinator entscheiden.
Verknüpfen Sie es mit der Anmelderoute
Platzieren Sie den Score-Aufruf direkt vor der Benutzererstellung. Lehnen Sie das Blockband ab, verlangen Sie eine E-Mail-Bestätigung im Challenge-Band und lassen Sie den Rest unberührt.
// app/api/signup/route.ts (Next.js)
import { NextResponse } from 'next/server';
import { scoreSignup } from '@/lib/signup-score';
export async function POST(req: Request) {
const body = await req.json();
const ip = req.headers.get('x-forwarded-for')?.split(',')[0] ?? '0.0.0.0';
const result = await scoreSignup({ ip, email: body.email });
if (result.verdict === 'block') {
await auditLog({ type: 'signup.blocked', ip, email: body.email, score: result.score });
return NextResponse.json({ error: 'signup_rejected' }, { status: 403 });
}
const user = await createUser({
email: body.email,
password: body.password,
requiresEmailVerification: result.verdict === 'challenge',
riskScore: result.score,
});
return NextResponse.json({ user });
}
Überprüfen Sie jede Entscheidung
Ohne Daten können Sie die Schwellenwerte nicht anpassen. Behalten Sie den Punktestand und die Rohsignale bei jeder Anmeldung bei.
// Persist the score and signals with the user row for later calibration.
await db.signupAudit.insert({
userId: user.id,
ip,
score: result.score,
verdict: result.verdict,
signals: result.signals,
createdAt: new Date(),
});
Kalibrieren Sie wöchentlich gegen Abwanderung und Missbrauch
Erstellen Sie einmal pro Woche einen Bericht. Sagt ein höherer Wert eine höhere Abwanderungsquote, eine höhere Rückerstattungsrate oder mehr Missbrauchsmeldungen voraus? Wenn die Abwanderungsquote bei 60 Anmeldungen bei 80 % liegt und bei 10 Anmeldungen bei 4 %, werden Ihre Gewichtungen kalibriert und Sie können den Blockierungsschwellenwert verschärfen. Wenn der Farbverlauf flach ist, gewichten Sie ihn neu.
-- rerun weekly: does the score predict churn and abuse?
SELECT
FLOOR(score / 10) * 10 AS score_bucket,
COUNT(*) AS signups,
ROUND(100.0 * SUM(CASE WHEN churned THEN 1 ELSE 0 END) / COUNT(*), 1) AS churn_pct,
ROUND(100.0 * SUM(CASE WHEN abuse_reported THEN 1 ELSE 0 END) / COUNT(*), 1) AS abuse_pct
FROM signup_audit
WHERE created_at > NOW() - INTERVAL '90 days'
GROUP BY 1
ORDER BY 1;
Das Ziel ist eine monotone Kurve. Jeder Score-Bucket sollte schlechtere Ergebnisse haben als der darunter liegende. Wenn nicht, fügen Sie ein Signal hinzu (Gerätefingerabdruck, Anmeldegeschwindigkeit von demselben /24) oder lassen Sie ein Gewicht fallen, das nicht sein eigenes Gewicht zieht.
Wo das passt vs. Captcha
| Ansatz | Reibung für echte Benutzer | Kosten für den Angreifer | P99-Latenz |
|---|---|---|---|
| reCAPTCHA v2 | 3-15 % Rückgang | 1 $ pro 1.000 Lösungen | 300–800 ms |
| hCaptcha Enterprise | 2–8 % Rückgang | 1-2 $ pro 1.000 | 250–600 ms |
| 3-Signal-Score | 0 % für 95 % der Benutzer | Muss eine saubere IP + echtes Postfach erwerben | 80-120 ms |
Ein Score ersetzt kein Captcha, wenn Sie Bot-sichere Anmeldeflüsse für eine US-Bank benötigen. Es ist die richtige Standardeinstellung für SaaS-Anmeldungen, Newsletter und Test-Gates.
Was dies nicht abdeckt
- Credential-Stuffing bei der Anmeldung: Verwenden Sie einen Passkey oder eine Ratenbegrenzung pro Konto.
- Koordinierte Anmelde-Bursts von Privat-Proxys: Fügen Sie Geschwindigkeitsbegrenzungen pro 1/24 und pro E-Mail-Domäne plus Anmeldeminute hinzu.
- Benutzer, die die E-Mail-Verifizierung mit einer Wegwerfadresse abschließen: Legen Sie eine 24-Stunden-Sperre des Funktionszugriffs für das Challenge-Band fest.
Holen Sie sich einen API-Schlüssel und geben Sie ihn ein
Holen Sie sich einen kostenlosen Schlüssel unter botoi.com/api/signup. Das kostenlose Kontingent umfasst 1.000 Punkte pro Tag, genug, um eine Kalibrierung anhand der Anmeldungen der letzten Woche durchzuführen. Bezahlte Pläne beginnen bei 9 $/Monat für 10.000 Anfragen pro Tag.
Vollständige Referenz für jeden Endpunkt: VPN-Erkennungs-API, Einweg-E-Mail-Check-API, Und IP-Blocklist-Check-API.
FAQ
- Warum nicht stattdessen ein Captcha verwenden?
- Captchas-Kostenumwandlung (typischer Rückgang: 3 bis 15 % der echten Benutzer) und kommerzielle CAPTCHA-Farmen lösen reCAPTCHA v2 für weniger als 1 $ pro Tausend. Durch die Bewertung mit Signalen entfällt bei 95 % der Anmeldungen die Reibung und es werden nur die verdächtigen Teile herausgefordert.
- Welche Signale gehen in die Partitur ein?
- Drittens: VPN/Tor/Rechenzentrums-IP-Flags, wegwerfbare oder wegwerfbare E-Mail-Domäne und IP-Blocklist-Treffer (Bogons, verdächtige Hostnamen). Jeder kehrt in weniger als 50 ms zurück. Gewichten Sie sie, um einen Risikowert von 0–100 zu erhalten, und entscheiden Sie dann pro Schwellenwert.
- Schadet das Blockieren von Rechenzentrums-IPs echten Benutzern?
- Unternehmens- und Verbraucher-IPs stimmen nicht mit den CIDR-Blöcken des Rechenzentrums überein. Die einzigen wirklich betroffenen Benutzer sind Personen mit ständig aktiven VPNs. Dies ist normalerweise eine Minderheit, die Sie an einen sekundären Verifizierungspfad weiterleiten können, anstatt sie vollständig zu blockieren.
- Wie gehe ich mit der Low-Signal-Mitte um?
- Punktzahl über 70: Block. Punktzahl unter 20: erlauben. Zwischen 20 und 70: E-Mail-Bestätigung oder Step-up (SMS-Code, Passkey) erforderlich. Sie verlagern die Reibung auf das riskante Band statt auf den gesamten Trichter.
- Kann ich die Bewertung anhand historischer Anmeldungen testen?
- Ja. Sehen Sie sich die Registrierungen der letzten 90 Tage über die drei Endpunkte noch einmal an, verknüpfen Sie die Bewertung mit den Spalten „Abwanderung“, „Rückerstattung“ und „Missbrauchsmeldung“ und kalibrieren Sie Ihre Schwellenwerte, bevor Sie etwas durchsetzen. Jeder Endpunkt bleibt bei wiederholten Aufrufen mit derselben Eingabe stabil.
Starte mit botoi zu entwickeln
150+ API-Endpunkte für Abfragen, Textverarbeitung, Bildgenerierung und Entwickler-Tools. Kostenloser Tarif, keine Kreditkarte nötig.